Завершение игры, когда два узла сталкиваются
У меня есть два отдельных узла с их собственными физическими телами, и когда они сталкиваются, должна появиться 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()
}
Вам нужно добавить мир физики в качестве контактного представителя для ваших методов работы.
class GameScene: SKScene, SKPhysicsContactDelegate {
override func didMoveToView(view: SKView) {
physicsWorld.contactDelegate = self
И, как сказал Вихрь, вам нужно установить categoryBitMask
а также contactTestBitMask
для узла круга.
Тогда все должно работать. Я надеюсь, что смогу помочь.