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