在我的游戏中,我有大约6种不同的对象变体。每个对象都附有一个b2Body,b2BodyDef和b2FixtureDef。 在我的情况下,我的b2Bodys正在关注我的CCSprites,因为Cocos2D更容易使用动画。
无论如何,我试图关注Ray Wenderlich的教程:http://www.raywenderlich.com/606/how-to-use-box2d-for-just-collision-detection-with-cocos2d-iphone
事情是我对他实际做的事情感到很困惑! 问题: 1.我的CCScene中的Contact Listener代码是否需要在我的游戏循环中? 这是他在CCScene中进行碰撞检测的主要代码: 3.我也看到在下面的代码中他使用了CCSprites的标签,这是否意味着我的CCSprites不一定是ivars?那么我的b2Bodys,b2BodyDefs和b2FixtureDefs呢,他们必须是ivars吗?他只是用标签做的吗?
std::vector<b2Body *>toDestroy;
std::vector<MyContact>::iterator pos;
for(pos = _contactListener->_contacts.begin();
pos != _contactListener->_contacts.end(); ++pos) {
MyContact contact = *pos;
b2Body *bodyA = contact.fixtureA->GetBody();
b2Body *bodyB = contact.fixtureB->GetBody();
if (bodyA->GetUserData() != NULL && bodyB->GetUserData() != NULL) {
CCSprite *spriteA = (CCSprite *) bodyA->GetUserData();
CCSprite *spriteB = (CCSprite *) bodyB->GetUserData();
if (spriteA.tag == 1 && spriteB.tag == 2) {
toDestroy.push_back(bodyA);
} else if (spriteA.tag == 2 && spriteB.tag == 1) {
toDestroy.push_back(bodyB);
}
}
}
std::vector<b2Body *>::iterator pos2;
for(pos2 = toDestroy.begin(); pos2 != toDestroy.end(); ++pos2) {
b2Body *body = *pos2;
if (body->GetUserData() != NULL) {
CCSprite *sprite = (CCSprite *) body->GetUserData();
[_spriteSheet removeChild:sprite cleanup:YES];
}
_world->DestroyBody(body);
}
if (toDestroy.size() > 0) {
[[SimpleAudioEngine sharedEngine] playEffect:@"hahaha.caf"];
}
事情就像以前一样,他只有两件可以碰撞的东西。在我的情况下,我有6.所以我必须以任何方式修改该代码以使用我的6个可能的b2Bodys吗?
谢谢!