swift - 为什么我的代码从未检测到与我的 SKPhysicsBody 有任何接触?

标签 swift sprite-kit skphysicsbody

我遇到的问题是我创建的用于检测接触的代码无法正常工作。我希望它在球类接触到障碍物类时起作用。我的代码有什么问题?非常感谢,感谢您的帮助!

这里是我定义类别的地方:

let ballCategory : UInt32 = 0x1 << 1
let obstacleCategory : UInt32 = 0x1 << 2

这是我创建球的物理方面的地方:

    leftBall.physicsBody = SKPhysicsBody(rectangleOf: leftBall.size)
    leftBall.physicsBody?.categoryBitMask = ballCategory
    leftBall.physicsBody?.contactTestBitMask = obstacleCategory
    leftBall.physicsBody?.affectedByGravity = false
    leftBall.physicsBody?.isDynamic = false
    leftBall.physicsBody?.collisionBitMask = 0

我在这里创建障碍物的物理方面:

    obstacleSquare.physicsBody = SKPhysicsBody(rectangleOf: obstacleSquare.size)
    obstacleSquare.physicsBody?.categoryBitMask = obstacleCategory
    obstacleSquare.physicsBody?.contactTestBitMask = ballCategory
    obstacleSquare.physicsBody?.affectedByGravity = false
    obstacleSquare.physicsBody?.isDynamic = false
    obstacleSquare.physicsBody?.collisionBitMask = 1

这是我的碰撞检测函数:

func didBegin(_ contact: SKPhysicsContact) {

    print("CONTACT")

    if contact.bodyA.categoryBitMask == obstacleCategory {

        print("CONTACT")
        gameOver()

    }

    if contact.bodyB.categoryBitMask == obstacleCategory {

        print("CONTACT")
        gameOver()

    }

    if contact.bodyA.categoryBitMask == ballCategory {

        print("CONTACT")
        gameOver()

    }

    if contact.bodyB.categoryBitMask == ballCategory {

        print("CONTACT")
        gameOver()

    }

}

最佳答案

你对象的两个物理体都将它们的 isDynamic 属性设置为 false。至少其中一个需要将此属性设置为 true 才能注册任何联系人。

关于swift - 为什么我的代码从未检测到与我的 SKPhysicsBody 有任何接触?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47275988/

相关文章:

ios - Swift:从另一个 viewController 类访问枚举

Swift 2 - 在 if 语句上使用 break 的用例?

ios - 动态单元格高度问题

ios - 奇怪的 SpriteKit + UIDynamics 错误

ios - 缩放使用 SKSpriteNodes 制作的钟摆

ios - SKSpriteNode 减慢但不应该

swift - 无法使用 '[Any]' 类型的索引为 'String' 类型的值添加下标

ios - SpriteKit声音内存消耗问题

ios - 子类化 SKSpriteNode 时物理体问题?

swift - body 从圆形变为矩形时无法识别联系人