Situation: Ich habe zwei oder mehr Schiffe auf meinem iOS-Bildschirm. Beide haben unterschiedliche Attribute wie Name, Größe, Hitpoints und Punkte. Sie werden als SKSpriteNodes
angezeigt und jeder hat eine physicsBody
hinzugefügt.Wie kann man herausfinden, welcher SKSpriteNode in Swift von der Kollisionserkennung betroffen ist?
Im Moment sind diese zusätzlichen Attribute Variablen einer erweiterten SKSpriteNode
Klasse.
import SpriteKit
class ship: SKSpriteNode {
var hitpoints: Int = nil?
var score: Int = nil?
func createPhysicsBody(){
self.physicsBody = SKPhysicsBody(circleOfRadius: self.size.width/2)
self.physicsBody?.dynamic = true
...
}
}
In diesem ‚Spiel‘ Sie auf diesen Schiffen schießen und so bald wie eine Kugel, ein Schiff trifft, erhalten Sie Punkte. 'Hits a ship' wird durch Kollision erkannt.
func didBeginContact(contact: SKPhysicsContact){
switch(contact.bodyA.categoryBitMask + contact.bodyB.categoryBitMask){
case shipCategory + bulletCategory:
contactShipBullet(contact.bodyA, bodyB: contact.bodyB)
break;
default:
break;
}
}
Problem: Kollisionserkennung gibt nur eine physicsBody und ich weiß nicht, wie meine erweiterte SKSpriteNode
Klasse erhalten gerade dieses physicsBody.
Gedanken: Ist es ein richtiger Weg, um SKSpriteNode
zu verlängern, um meine Objekte wie ein Schiff zum Leben zu erwecken? Wenn ich ein Schiff zu meinem Bildschirm hinzufügen sieht es so aus:
var ship = Ship(ship(hitpoints: 1, score: 100), position: <CGPosition>)
self.addChild(ship)
ist oder dies nur ein falscher Ansatz, und es gibt eine viel bessere Weise, die mit Statistiken Objekt, um herauszufinden, so und so durch eine Kugel durch Kollision getroffen wird Erkennung?
Diese Frage ist ähnlich wie meine anderen question - Ich möchte nur im weiteren Sinne fragen.
Endlich gab mir jemand die richtige Lösung - vielen Dank. Ich benutze jetzt diese Zeile 'var ship = bodyA.categoryBitMask == bubbleCategory? bodyA.node als? Schiff: bodyB.node als? Schiff'. Und das ist der richtige Ansatz, um spielobjektrelevante Daten wie Score und Hitpoints zu speichern? Ich werde die Lösung mit mehreren verschiedenen Spielobjekten testen und sobald alles funktioniert, werde ich dies als richtige Antwort markieren. – Jurik