1

別のスプライトに触れたときにスプライトが自分自身を削除するようにします。今、彼らが触れるとき、彼らはお互いを押し合うだけです.

私はこれを持っています:

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()
    }
}
4

3 に答える 3

1

最初に、firstBody と secondBody を、collisionBitMask の順序に設定する必要があります。

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
于 2014-10-09T18:45:33.367 に答える
1

去年の夏、SpritKit ゲームに取り組んでいるときにわかったように、これは実際に問題を引き起こします。SKPhysicsContact コールバック中にシーンのノード構造を変更すると、結果は Apple によれば未定義です。これについてバグを報告した後に私が言われたことは、これらのコールバックの内部からシーンのノード構造を決して変更してはならないということでした。代わりに、Apple は、単にフラグを設定してから、安全な更新ループでシーンの変更を処理するように言っています。

于 2015-01-23T15:15:45.717 に答える