在Swift中未被调用的didBegin contact函数

8
我有两个节点,我想检测它们之间的碰撞,但由于某些原因,func didBegin(_ contact: SKPhysicsContact)没有被调用。这是球和球拍:
ball.physicsBody?.categoryBitMask = 2
ball.physicsBody?.contactTestBitMask = 2        
ball.physicsBody?.isDynamic = true

main.physicsBody?.categoryBitMask = 1
main.physicsBody?.contactTestBitMask = 1
main.physicsBody?.isDynamic = false

_

func didBegin(_ contact: SKPhysicsContact) {
        print("Collision") //Obviously this will be better in future, but I need to detect collision for a start
}

当球在运动时,它会弹开挡板,但我需要能够检测到这一点。
谢谢。

看看Ray Wenderlich's是如何做到的。 - bobobobo
2个回答

4

请检查以下内容:

确保将物理世界的联系代表设置为其自身 class GameScene: SKScene, SKPhysicsContactDelegate{

override func didMove(to view: SKView) {
    physicsWorld.contactDelegate = self
    self.backgroundColor = .white
    }

如果您已经指定了一个物理体,例如:
box.physicsBody = SKPhysicsBody(rectangleOf: CGSize)

确保它已经被解压缩了(! 不是 ?)。
box.physicsBody!.affectedByGravity = true

使物理体动态化:
    box.physicsBody!.isDynamic = true

哇塞,太感谢了!我已经试了四天了,终于搞定了!!!非常感谢!!! - jbiser361
1
你不需要设置 isDynamic = true - bobobobo

0
在你的 GameScene: SKScene, SKPhysicsContactDelegate 对象的 init() 方法中,确保将 physicsWorld 变量的 contactedDelegate 属性分配给你的场景(这里是 self):
class GameScene: SKScene, SKPhysicsContactDelegate {
    override func sceneDidLoad() {
        physicsWorld.contactDelegate = self // Most important part!
    }

    internal func didBegin(_ contact: SKPhysicsContact) {
        print("Collision!") // Now every objects colliding within self will call didBegin()
    }
}

希望这可以帮到你,并且更容易理解,祝你愉快,兄弟。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接