2016-09-24 6 views
0

私はスピリット3でスピリットキットを使用しています。私の質問は、1つのノード(私はそれを惑星と呼ぶ)に弾を撃った後です。私は銃弾だけが場面から消えて、私のノード(惑星)がまだ走り続けていて、そのノード(惑星)がメインプレイヤーと衝突すると両方とも消える(ここで問題はない)。私の問題は弾丸がノードそれらの両方私はちょうどBullet.removefromParentを(書いてどのようにこれまでの衝突機能で消える)、ここでは私のコードは、(私は弾丸と衝突した後、私の惑星を維持し、私の弾丸がシーンから削除したい)である:SpritKit swift 3物理的なボディの衝突と1つのノードのみを削除

func CollitionPlannetWithBullet(_ Bullet : SKSpriteNode, Planet : SKSpriteNode){ 
    Bullet.removeFromParent() 
} 

、これはありますコードが連絡先機能を開始しましたn個の惑星と弾丸のために:

if ((firstBody.categoryBitMask == physicsCatagory.Planet) && 
    (secondBody.categoryBitMask == physicsCatagory.Bullet)) || 
    ((firstBody.categoryBitMask == physicsCatagory.Bullet) && 
    (secondBody.categoryBitMask == physicsCatagory.Planet)) { 
     CollitionPlannetWithBullet(firstBody.node as! SKSpriteNode, Planet: secondBody.node as! SKSpriteNode) 
} 
+0

、あなたのif文では、自分自身が混乱している、あなたはbody1またはbody2は弾丸可能と言うが、あなたの 'CollitionPlannetWithBullet'中(スペルエラー?)あなただけbody1があると言っています弾丸。試して一貫性を維持する – Knight0fDragon

答えて

0

これを行うための最善の方法は、その1つのサブクラス化機能を使用して、衝突の各ノードを処理するために許可すれば、あなたが使用することができますSKSpriteNodeをsublcassすることである私を見つけました。

サブクラス化と多型性については、コードをもっときれいにし、物事を構築する上でより柔軟性を持たせることをお勧めします。

func evalChainGun_Drone(_ contact: SKPhysicsContact){ 
    let nodeA = contact.bodyA.node 
    let nodeB = contact.bodyB.node 

    //A Items 
    if let shotA = nodeA as? ChaingunBullet { 
     shotA.damage()} 

    if let droneA = nodeA as? Drone { 
     droneA.weaponDamage(droneA.HP_Class, damage: 1, node: droneA, contactLocation: contact.contactPoint) 
    } 

    //B Items 
    if let shotB = nodeB as? ChaingunBullet { 
     shotB.damage()} 

    if let droneB = nodeB as? Drone { 
     droneB.weaponDamage(droneB.HP_Class, damage: 1, node: droneB, contactLocation: contact.contactPoint) 
    } 
} 

私はそれが役に立ちそうです。

敬具、 アンデッド地球

+0

これはどのように役立ちますか? – Knight0fDragon

+0

さらに、以下を参照してください:https://en.wikipedia.org/wiki/Don%27t_repeat_yourself – Knight0fDragon

+0

spritekitの問題は、どのノードがどの連絡先かを実際には制御できないため、両方の条件を処理する必要があることです。私は重複したコードがベストプラクティスではないかもしれないことに同意しますが、私はSwiftと一緒にそれをキツキする方法についてはわかりません。 –

関連する問題