【问题标题】:Ending a game when two nodes collide当两个节点碰撞时结束游戏
【发布时间】:2015-12-07 17:06:37
【问题描述】:

我有两个独立的节点,它们有自己的物理实体,当它们发生碰撞时,应该会出现一个带有高分和重播按钮的 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)


}

我错过了什么吗?如有必要,将发布更多代码。

【问题讨论】:

  • 方法 createDown 是在场景中还是在其他类中定义的?你能展示你是如何定义你的类别的吗?如果场景中定义了createDown方法,那么你忘了给圆节点设置categoryBitMask和contactTestBitMask...

标签: swift sprite-kit skphysicsbody skscene


【解决方案1】:

只需使用 intersectsNode 并在两个节点碰撞时调用 gameOver() 即可。

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

SKNode 类参考:SKNode

【讨论】:

  • 另外,我如何在全局范围内声明我的 createDown(position: CGPoint) func?
  • 创建一个结构,在其中(类外部)保存函数,并在您需要的任何地方创建该结构的实例
  • 我在尝试此操作时收到错误“无法转换为 SKNode 类型”。
【解决方案2】:

您需要将物理世界添加为联系人代理,您的方法才能正常工作。

class GameScene: SKScene, SKPhysicsContactDelegate {

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

就像 Whirlwind 说的,你需要为圆形节点设置你的categoryBitMaskcontactTestBitMask

然后一切都应该工作。希望能帮上忙。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-26
    • 2017-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多