0

大家好,我目前正忙于在这里开发一个应用程序。问题是我有一个类,它创建了许多实例,每个实例由一个 CCPhysicsSprite 和一个 b2body 组成。在与任何其他类的任何其他对象发生碰撞期间,该特定实例应该消失。现在我创建了一个联系人监听器来确定联系人,问题是我需要访问特定实例才能销毁它。充其量,我可以访问它的 CCPhysicsSprite 及其标签,但不能真正获得该类的特定实例。我希望有人能帮助我。

4

1 回答 1

0

将实例作为 UserData 传入 box2d 主体。当冲突发生时,您可以通过将用户数据 void 指针转换回其正确类型来检索实例并相应地处理它。

// C++ example
void SomeClass::BeginContact(b2Contact* contact)
{
    b2Body* bA = contact->GetFixtureA()->GetBody();
    b2Body* bB = contact->GetFixtureB()->GetBody();
    b2MetaData* bAMeta = (b2MetaData*)bA->GetUserData();
    b2MetaData* bBMeta = (b2MetaData*)bB->GetUserData();

    delete bAMeta;
    delete bBMeta;
}

如果该实例是一个 Objective-C 实例,您可能必须使用 __bridge 强制转换。有关如何使用它的更多信息,您可以在此处找到。SO - ARC 和桥接铸件

请记住,它自身的 box2d 主体的移除必须在世界步骤之外完成,所以如果您只是以某种方式标记要移除的主体(其中的一个标志或者可能将其添加到名为 toBeRemoved 的列表中)并在之后该步骤已经结束,您可以遍历容器以移除 box2d 主体。

于 2013-08-26T15:14:39.560 回答