2016-09-24 5 views
0

Ich benutze Sprit-Kit auf swift 3 meine Frage ist nach dem Schießen Kugeln auf einen Knoten (ich nannte es Planet) Ich will nicht, dass Knoten (Planet) verschwinden Ich will, dass nur Kugeln aus der Szene verschwinden und mein Knoten (Planet) läuft weiter und wenn dieser Knoten (Planet) mit dem Hauptspieler kollidiert, verschwinden beide (was hier kein Problem ist). Mein Problem ist, wenn Kugeln damit kollidieren Knoten beide wie immer in Kollisionsfunktion verschwinden i Bullet.removefromParent gerade geschrieben() hier ist mein Code (ich will meinen Planeten halten, nachdem sie mit Kugel und meine Kugel entfernen Szene kollidieren):SpritKit swift 3 Physik Körper Kollision und entfernen Sie nur einen Knoten

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

und das ist Der Code in hat den Kontakt functio begonnen n für den Planeten und Kugeln:

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

Sie selbst sind verwirrend, Ihre in if-Anweisung, sagen Sie body1 oder body2 Kugeln sein können, aber in Ihrem 'CollitionPlannetWithBullet' (Rechtschreibfehler?) Sie sagen nur body1 ist Kugel. Versuchen und konsistent bleiben – Knight0fDragon

Antwort

0

Ich habe den besten Weg gefunden, dies zu tun ist SKSpriteNode sublcass die dann können Sie, wenn wir verwenden, um jeden Knoten bei einer Kollision zu behandeln, mit seinem einen subclassed Funktionen.

Ich würde empfehlen, auf Unterklassen und Polymorphismus zu lesen, da es Ihren Code viel sauberer macht und Ihnen viel mehr Flexibilität gibt, wie Sie Dinge bauen.

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

Ich hoffe, das ist hilfreich.

Mit freundlichen Grüßen, Undead-Erde

+0

wie hilft das überhaupt? – Knight0fDragon

+0

plus, bitte sehen Sie dies: https://en.wikipedia.org/wiki/Don%27t_repeat_yourself – Knight0fDragon

+0

Das Problem mit Spritekit ist, dass Sie wirklich keine Kontrolle darüber haben, welcher Knoten welcher Kontakt ist, so dass Sie beide Bedingungen behandeln müssen . Obwohl ich zustimme, dass duplizierter Code vielleicht keine Best Practice ist, bin ich mir nicht sicher, ob ich das mit Swift anstellen sollte. –

Verwandte Themen