Завершение игры, когда два узла сталкиваются

У меня есть два отдельных узла с их собственными физическими телами, и когда они сталкиваются, должна появиться SKScene с кнопкой высокого счета и воспроизведения. Вот как называется моя сцена:

func didBeginContact(contact: SKPhysicsContact) {
  gameOver()

    print("gameOver")
}

И вот как мои физические тела для моих узлов настроены:

   func createDown(position: CGPoint) -> SKNode {
    let circleNode = SKSpriteNode()
    let circle = SKSpriteNode(imageNamed: "first@2x")
    circleNode.position = CGPointMake(position.x, position.y)
    circleNode.physicsBody = SKPhysicsBody(circleOfRadius: 30)
    circleNode.physicsBody?.dynamic = false
    circle.size = CGSize(width: 75, height: 75)
    circleNode.addChild(circle)
    circleNode.name = "circleNode"
    circle.name = "CIRCLE"
    let up = SKAction.moveByX(0, y: -9000, duration: 100)
     physicsBody?.categoryBitMask = blackCategory
    circleNode.runAction(up)
    return circleNode
}
func playerPhysics() {
player.physicsBody = SKPhysicsBody(circleOfRadius: 30)
    player.physicsBody?.affectedByGravity = false
  player.physicsBody?.categoryBitMask = playerCategory
     player.physicsBody?.contactTestBitMask = blackCategory
}

А вот моя функция gameOver:

 func gameOver() {
   gameEnd = true
     let reveal = SKTransition.fadeWithDuration(1)
     let scene = GameOver(size: self.scene!.size)
     view!.presentScene(scene, transition: reveal)


}

Я что-то пропустил? Разместим больше кода, если это необходимо.

2 ответа

Просто используйте intersectsNode и вызывайте gameOver(), когда два узла сталкиваются.

if yourNode.intersectsNode(yourSecondNode) { gameOver() }

Ссылка на класс SKNode: SKNode

Вам нужно добавить мир физики в качестве контактного представителя для ваших методов работы.

class GameScene: SKScene, SKPhysicsContactDelegate {

    override func didMoveToView(view: SKView) {
        physicsWorld.contactDelegate = self

И, как сказал Вихрь, вам нужно установить categoryBitMask а также contactTestBitMask для узла круга.

Тогда все должно работать. Я надеюсь, что смогу помочь.

Другие вопросы по тегам