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

如果我瞭解你,你想限制一個設備在特定的時間內可以得到多少聯繫人?只需存儲什麼物體發生了碰撞並根據計時器進行檢查。如果你需要知道最後一次擊球的球是否存儲了最後一次擊球的對象指針。 –