Sprite kit 为什么在碰撞检查中有时会多次调用方法?
像SpriteKit中的许多游戏程序员一样,我使用特定对象之间的碰撞检测来调用方法或设置属性。然而,有时我的行为会在碰撞中发生两次。下面是我的didBeginContact方法中的一个示例:Sprite kit 为什么在碰撞检查中有时会多次调用方法?,sprite-kit,collision-detection,Sprite Kit,Collision Detection,像SpriteKit中的许多游戏程序员一样,我使用特定对象之间的碰撞检测来调用方法或设置属性。然而,有时我的行为会在碰撞中发生两次。下面是我的didBeginContact方法中的一个示例: uint32_t collision = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask); if (collision == (WWPhysicsCategoryShip | WWPhysicsCategoryWeapon))
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次 也许你可以试试这个
if weapon.parent != nil {
_localPlayerHP = _localPlayerHP - 5;
}
这个问题讨论了另一种方法,即在船只被击中后几秒钟内使其不受伤害
如何创建实体?如果将实体与多边形或纹理一起使用,则很可能形状在内部分解为凸面形状,并为每个形状生成碰撞事件,因此可以为单个实体获取多个事件