一尘不染

初学者Swift Sprite套件-节点碰撞检测帮助(SKPhysicsContact)

swift

我想要一个精灵在触摸另一个精灵时将自身删除。现在,当他们触摸时,他们只是互相推动。

我有这个:

let alphaCategory: UInt32 = 0x1 << 0
let betaCategory: UInt32 = 0x1 << 1

我使精灵充满活力,不受重力影响

self.physicsworld.contactDelegate = self

alpha.physicsBody?.categoryBitMask = alphaCategory
alpha.physicsBody?.contactTestBitmask = betaCategory

beta.physicsBody?.categoryBitMask = betaCategory
beta.physicsBody?.contactTestBitmask = alphaCategory

我无法迅速找到对我有意义的任何东西,但我认为问题出在这里

func didBeginContact(contact: SKPhysicsContact) {

    var firstBody: SKPhysicsBody
    var secondBody: SKPhysicsBody

    if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask {
        firstBody = contact.bodyA
        secondBody = contact.BodyB
        beta.removeFromParent()
    }
}

阅读 296

收藏
2020-07-07

共1个答案

一尘不染

首先,您应该将firstBody和secondBody设置为它们的crashBitMask的顺序:

if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask 
    {
        firstBody = contact.bodyA
        secondBody = contact.bodyB
    }
else {
        firstBody = contact.bodyB
        secondBody = contact.bodyA
     }

if firstBody.categoryBitMask=0 && secondBody.categoryBitMask=1 {
      secondBody.removeFromParent()
}

这样可以防止您的精灵与任何物体(包括彼此)碰撞。在设置其他BitMask属性的位置进行设置:

alpha.physicsBody.collisionBitMask = 0
beta.physicsBody.collisionBitMask = 0
2020-07-07