在给定其变量之一的情况下确定类的实例

时间:2013-08-26 03:17:51

标签: cocos2d-iphone box2d box2d-iphone

嗨,大家好,我目前正在努力开发应用程序。问题是我有一个类创建了一些实例,每个实例都由一个CCPhysicsSprite和一个b2body组成。在与任何其他类的任何其他对象发生冲突时,该特定实例应该消失。现在我已经创建了一个确定联系人的联系人监听器,问题是我需要访问特定实例才能销毁它。充其量,我能够访问其CCPhysicsSprite及其标签,但无法真正获得该类的特定实例。我希望有人帮助我。

1 个答案:

答案 0 :(得分: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 and bridged cast

请记住,移除box2d的身体必须在世界范围之外完成,所以如果你只是以某种方式标记要移除的身体(它中的一个标志或者可能将其添加到名为toBeRemoved的列表中)它会更好并且在步骤结束后,您可以迭代容器,移除box2d体。