【问题标题】:Collision detection not working using spritekit碰撞检测无法使用 spritekit
【发布时间】:2018-07-27 06:36:34
【问题描述】:

我无法使用 SKPhysicsContactDelegate 检测到碰撞。当对象发生碰撞时,在控制台中没有打印任何内容。

我在游戏场景中有两个精灵节点

有什么办法吗?

非常感谢

class GameScene: SKScene,SKPhysicsContactDelegate {


    var player :SKSpriteNode?
    var block :SKSpriteNode?


    override func didMove(to view: SKView) {
        player = self.childNode(withName: "Player") as? SKSpriteNode
        player?.name = "Player"

        block = self.childNode(withName: "block") as? SKSpriteNode
        block?.name = "Block"

        }
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    }
    override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
        for touch in touches {

            let location = touch.location(in: self)
            player?.position.x = location.x
            player?.position.y = location.y
        }
    }
    func didBegin(_ contact: SKPhysicsContact) {
        var firstbody = SKPhysicsBody()
        var secondbody = SKPhysicsBody()

        if contact.bodyA.node?.name == "Player"
        {
            firstbody = contact.bodyA
            secondbody = contact.bodyB

        }else {
            firstbody = contact.bodyB
            secondbody = contact.bodyB

        }
        if firstbody.node?.name == "Player" && secondbody.node?.name == "Block"
        {
            print("Collosion detected")
        }
    }

}

【问题讨论】:

  • 看看你的didBegin里的else语句,告诉我哪里错了
  • 我还假设您在 SKS 文件中制作物理实体?您可以从 didMove 中删除您的代码,这些都不需要(您的精灵已经具有这些名称,否则您将无法为它们分配这些名称,哈哈)。我也认为你有一个大写错误......你有“块”和“块”,swift是区分大小写的。

标签: ios swift sprite-kit gamekit


【解决方案1】:

您忘记将contactDelegate 设置为您是GameScene。

 physicsWorld.contactDelegate = self

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多