2011-07-19 103 views
1

我写一个游戏,不断的得分多少球都被打到 - 的想法是打尽可能多的。我正在使用Cocos2d和Box2d来进行物理和碰撞检测。Box2D的 - 检测单只碰撞

的评分工作,但有时球最终将沿侧对方移动,当这一切发生多次冲突记录。理想情况下,我只希望为每次真实碰撞记录一次碰撞(即得分++)。

什么是实现这一目标的最好方法,因为我想将比分增加,如果两个球击中不止一次,但只有当他们真正发生碰撞,而不是刮对方一起。

即时通讯目前使用下面的代码在我的蜱功能

//detect collisions 
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) { 
     NSLog(@"Collision!"); 

     score++; 
     [scoreLabel setString:[NSString stringWithFormat:@"Score: %d", score]]; 
    }  
} 

回答

3

你只检查,看看是否有任何冲突的。你需要检查哪些物体相撞并记录。

例如:

一般来说,我会步我的碰撞,你正在做的,但我会记录在数组中的精灵和或身体。当您通过碰撞检查时,请进行检查以确保您的阵列尚未存储该精灵/正文。如果有,则已经完成了碰撞,如果没有,则存储碰撞。然后,在我所有的碰撞被检查后,我删除任何精灵和尸体并添加我的观点。

接触监听器将报告两个bodyA打bodyB,和bodyB击中bodyA接触。就接触者听众而言,这是两种不同的碰撞。

+0

感谢这个阿龙,我曾想过类似的东西自己,但无法弄清楚如何再从在那里一个球击中它的情况下数组中删除碰撞,反弹那么一堵墙再打同一个球场。对于这种情况的任何建议? – Chris

+0

如果我了解你,你想限制一个设备在特定的时间内可以得到多少联系人?只需存储什么物体发生了碰撞并根据计时器进行检查。如果你需要知道最后一次击球的球是否存储了最后一次击球的对象指针。 –