为什么在碰撞检查中有时会多次调用方法?

时间:2015-02-01 00:37:23

标签: sprite-kit collision-detection

与SpriteKit中的许多游戏程序员一样,我在某些对象之间使用碰撞检测来调用方法或设置属性。但是,有时我的行为会在碰撞中发生两次。以下是我的didBeginContact方法中的一个示例:

uint32_t collision = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask);

if (collision == (WWPhysicsCategoryShip | WWPhysicsCategoryWeapon)) {
    SKNode *weapon = (contact.bodyA.categoryBitMask == WWPhysicsCategoryWeapon) ? contact.bodyA.node : contact.bodyB.node;
    [weapon removeFromParent];

    _localPlayerHP = _localPlayerHP - 5;
    NSLog(@"My Health is now at %i.", _localPlayerHP);
}

您会注意到我的船只的健康状况减少了5,并且与船舶接触的敌方武器被移除。但是在测试游戏时,我发现我的船的健康状况通常会减少10,增量为5(表明我的减少健康方法不止一次)。我发现这很奇怪,因为武器在第一次接触时被移除。如何确保每次接触时我的健康状况仅减少5次?

1 个答案:

答案 0 :(得分:0)

也许你可以试试这个

if weapon.parent != nil {
     _localPlayerHP = _localPlayerHP - 5;
}

这个问题讨论了另一种方法,即在船被击中后几秒内使船舶无懈可击。

didBeginContact is being called multiple times for the same SKPhysicsBody