我正在使用cocos2d和box2d制作iphone应用程序,我遇到了麻烦,我按照本教程了解如何使用b2ContactListener因为我的应用程序非常需要它... http://www.raywenderlich.com/505/how-to-create-a-simple-breakout-game-with-box2d-and-cocos2d-tutorial-part-22我正在尝试检测两个物体何时碰撞
对我来说,这是最困难的事情之一......不是说他在游戏中做了什么,而是如何使用b2contactlistener ...但是,我想在他的教程中使用他所做的我的代码
这是我更新我的tick方法所以它每次都会检查碰撞
-(void) update: (ccTime) dt
{
int32 velocityIterations = 8;
int32 positionIterations = 1;
// Instruct the world to perform a single step of simulation. It is
// generally best to keep the time step and iterations fixed.
world->Step(dt, velocityIterations, positionIterations);
std::vector<MyContact>::iterator pos;
for(pos = _contactListener->_contacts.begin();
pos != _contactListener->_contacts.end(); ++pos) {
MyContact contact = *pos;
if ((contact.fixtureA == _bottomFixture && contact.fixtureB == _ballFixture) ||
(contact.fixtureA == _ballFixture && contact.fixtureB == _bottomFixture)) {
NSLog(@"Ball hit bottom!");
}
}
}
但是,我不知道如何更改它以使用我的两个b2Bodies,eggBody和locations.platform ......
我相信我必须改变这几条线......
if ((contact.fixtureA == _bottomFixture && contact.fixtureB == _ballFixture) ||
(contact.fixtureA == _ballFixture && contact.fixtureB == _bottomFixture)) {
NSLog(@"Ball hit bottom!");
}
在哪里说_bottomFixture和_ballFixture我以为我会插入我的b2Bodies ...但现在我觉得_bottomFixture甚至不是b2body
:)任何帮助都会非常抱歉,如果我困惑任何人只是发布任何问题,我会澄清thankyou
答案 0 :(得分:1)
_bottomFixture是一个b2Fixture对象。
通过
创建body的fixturedef时创建 bottomBody->CreateFixture(&_fixturedef);
以上行返回b2Fixture。 所以你可以写
b2Fixture *_bottomFixture = bottomBody->CreateFixture(&_fixturedef);
通常我们不会跟踪这个b2Fixture对象。但在碰撞检测中,我们需要使用它。