SpriteKit错误地检测多个碰撞

我一直在通过一个SpriteKit教程来制作一个Flappy Bird风格的游戏。 我遇到的其中一个问题是错误地触发了碰撞检测代码。

有时候,这是完美的…它击中地面,它发射的方法,当它与地面碰撞。 但是,在看似随机的时候,它会撞到地面,并且以2-6次的距离发射地面碰撞的方法。 屏幕上是否存在其他节点并不重要。 我可以坐下来让它立即放下,有时候我碰到碰撞码正确的跑了一次,其他时候跑了好几次。 这段代码有什么错误导致它做到这一点?

更新:这似乎是两个物体在多个相交点上相遇的地方。 如果对象A在3点与对象B相交,则会发射3次。 你如何防止这样做?

- (void)didBeginContact:(SKPhysicsContact *)contact { SKPhysicsBody *firstBody, *secondBody; if (contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask) { firstBody = contact.bodyA; secondBody = contact.bodyB; } else { firstBody = contact.bodyB; secondBody = contact.bodyA; } if ((firstBody.categoryBitMask & pillerCategory) != 0 && (secondBody.categoryBitMask & flappyBirdCategory) != 0) { [self pillar:(SKSpriteNode *) firstBody.node didCollideWithBird:(SKSpriteNode *) secondBody.node]; } else if ((firstBody.categoryBitMask & flappyBirdCategory) != 0 && (secondBody.categoryBitMask & bottomBackgroundCategory) != 0) { [self flappyBird:(SKSpriteNode *)firstBody.node didCollideWithBottomScoller:(SKSpriteNode *)secondBody.node]; } } - (void)pillar:(SKSpriteNode *)pillar didCollideWithBird:(SKSpriteNode *)bird { NSLog(@"Did collide with bird"); [self showGameOverLayer]; } - (void)flappyBird:(SKSpriteNode *)bird didCollideWithBottomScoller:(SKSpriteNode *)bottomBackground { NSLog(@"Did collide with scroller"); [self showGameOverLayer]; } 

我会解决这个问题的最简单的方法是使用这个。

1st创build一个名为running的BOOL。

 BOOL running; 

当游戏开始时,第二组游戏运行到YES

 running = YES; 

第三如果你的碰撞代码是这样的,

 if(running == YES) { //do collision detection } else { //do nothing } 

你也可以使用这个运行的布尔来控制其他有用的部分,比如你的更新方法。