在Swift

时间:2017-11-11 15:37:41

标签: ios swift sprite-kit collision

据我了解碰撞在Swift SpriteKit中的工作方式;您可以识别位掩码的组合,识别可能与之发生冲突的内容,并处理名为didBegin的事件。这是我的方法版本:

func didBegin(_ contact: SKPhysicsContact) {
    print("test")
    print (contact.bodyA.node?.name)
    print (contact.bodyB.node?.name)
}

然后我为三个不同的类别设置了一个掩码:

private let collisionAlien : UInt32 = 1 << 0
private let collisionBullet : UInt32 = 1 << 1
private let collisionPlayer : UInt32 = 1 << 2

根据我的理解,应该导致:

...001
...010
...100

最后,我设置了每个屏幕元素的类别:

player.physicsBody?.categoryBitMask = collisionPlayer
player.physicsBody?.collisionBitMask = 0
player.physicsBody?.contactTestBitMask = 0

...

alien.physicsBody?.categoryBitMask = collisionAlien
alien.physicsBody?.collisionBitMask = 0
alien.physicsBody?.contactTestBitMask = collisionPlayer

我的理解是,当一个外星人与玩家接触时,该事件应该发射,但两者之间不应发生任何物理交互。虽然后者是真的(物体通过彼此),但前者不是。事件不会发生。

显然,我误解了这种互动的根本性。例如,当外星人与玩家相交时,我怎样才能引发有问题的事件?

0 个答案:

没有答案