2015-10-22 4 views
0

Я делаю простую игру Pong с помощью SpriteKit + Swift. Прямо сейчас я пытаюсь обнаружить, когда мяч попадает в край экрана. Когда я запускаю свой код, и мяч попадает в край экрана, по какой-то причине оценка увеличивается дважды, а не раз. Например, консоль считываетОбнаружение столкновений в SpriteKit + Swift

Player 1 has a score of: 1. 
Player 1 has a score of: 2. 

Когда я ударяю правой стороной экрана один раз.

Мой код в функции didBeginContact:

func didBeginContact(contact: SKPhysicsContact) { 
    var firstBody = SKPhysicsBody() 
    var secondBody = SKPhysicsBody() 

    if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask { 
     firstBody = contact.bodyA 
     secondBody = contact.bodyB 
    } else { 
     firstBody = contact.bodyB 
     secondBody = contact.bodyA 
    } 

    if firstBody.categoryBitMask == ballCategory && secondBody.categoryBitMask == leftSideCategory { 
     player2Score++ 
     print("Player 2 has a score of: \(player2Score).") 
    } else if firstBody.categoryBitMask == ballCategory && secondBody.categoryBitMask == rightSideCategory { 
     player1Score++ 
     print("Player 1 has a score of: \(player1Score).") 
    } 

} 
+0

проверить этот ответ. http://stackoverflow.com/questions/24228274/why-are-didbegincontact-called-multiple-times – FierceMonkey

ответ

1

Установите firstBody.categoryBitMask нечто иное, чем ballCategory. Возможно, что-то вроде deadBallCategory, которое установлено на 0x0 (или 0, или, тем не менее, вы их определяете в любом случае, установите его на 0). Затем ваш firstBody (мяч) не будет продолжать запускать вашу функцию didBeginContact. Когда вы создаете новый шар для добавления в сцену, не забудьте установить categoryBitMask в ballCategory (что кажется, что вы все равно).

Смежные вопросы