Я пишу игру, в которой ведется подсчет количества ударов по мячу - идея в том, чтобы поразить как можно больше.Я использую Cocos2d и 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]];
}
}