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