2016-10-25 16 views
0

これで検索しましたが、この問題の答えが見つかりません。 私は、3つの異なるノードタイプを使用して、衝突を処理します。流星、ショット、駅。私はショットと流星の間の衝突処理のコードを完璧には持っていますが、私の人生では、衝突にどのように反応するかを理解できません(衝突は検出されていますが、応答コードは実行されません)。駅と流星。ここに私のdidBeginのfuncがあります:3種類の衝突体? Swift3 + Spritekit

func didBegin(_ contact: SKPhysicsContact){ 
    print("contact") 
    let shot = (contact.bodyA.categoryBitMask == shotCategory) ? contact.bodyA : contact.bodyB 
    let stationBody = (contact.bodyA.categoryBitMask == stationCategory) ? contact.bodyA : contact.bodyB 
    let otherObject = (shot == contact.bodyA) ? contact.bodyB : contact.bodyA 

    if ((contact.bodyA == stationBody) && (contact.bodyB == otherObject)) { 
     print("collision!") 
    } 
} 

「接触」流星は、駅と衝突したときに印刷されたが、「衝突!」されています印刷されていません。私は、コードを言葉で表現されている方法で行うには、その得た何かを知っているが、私は、それは関係なく、私が書くどのように動作しないことを得るように見えることはできません/書き換え、それ

答えて

0

...順序を考慮してみ

if (contact.bodyA == stationBody && contact.bodyB == otherObject) || (contact.bodyB == stationBody && contact.bodyA == otherObject) 

また、ショットに応じて他のオブジェクトを設定しているので、ショット内のオブジェクトが1つでもない場合は、問題がある可能性があります。

ボディAがもう一方のオブジェクトで、ボディBの場合はショットが設定されますbodyB(categoryBitMask!= shotCategoryのため)、otherObjectはbodyAに設定されます。したがって、contact.bodyBはotherObjectと等しくありません。

+0

ありがとうございます!私は家に帰ると間違いなくそれを試してみましょう、それがどのようになったのかを教えてください –

+0

がうまくいきます!助けてくれてありがとう –