2016-06-26 10 views
1

Ich versuche eine Möglichkeit zu finden, eine Position für mehrere Knoten zu verfolgen, die zufällig auf dem Bildschirm spwan, so dass ich Änderungen an ihnen während der Bewegung bei der zufälligen Position vornehmen kann .Verfolgen Sie die Position von SKSpriteNode während einer SKAction moveTo

die Knoten nur entlang der x-Achse bewegen, und ich will von 0 bis postion.x des Balls Zufallszahl erzeugen zu können, und die Farbe ändern, wenn es über die Positon

reachs
override func update(currentTime: CFTimeInterval) 

ich versuchte, Änderungen in Aktualisierungsmethode Anheften aber sobald neue Knoten Appers ein i verloren Spur der previos

ich habe auch versucht

 let changecolor = SKAction.runBlock{ 
     let wait = SKAction.waitForDuration(2, withRange: 6) 
     let changecoloratpoint = SKAction.runBlock { self.changecolorfunc(self.ball)} 
     let sequence1 = SKAction.sequence([wait, changecoloratpoint]) 
     self.runAction(SKAction.repeatAction(sequence1, count: 3)) 
    } 

aber es macht mir keine Kontrolle über t er zufällige Position

Antwort

1

Sie haben bereits alles, was Sie brauchen.

Angenommen, Sie eine Referenz für Ihren Knoten haben:

var sprite1: SKSpriteNode! 

Und Sie wollen es in eine zufällige Position zum Laichen (ein Beispiel Methode ..):

self.spawnToRandomPos(sprite1) 

Und wenn Sie möchten, moveTo Ihre sprite1:

self.sprite1.runAction(SKAction.moveToY(height, duration: 0)) 

Jedesmal, wenn man seine Position überprüfen Sie wissen, wo es ist:

print(sprite1.position) 

So wissen immer Ihre sprite1 Position Sie diesen Code tun konnte, und Sie sehen, alle es Bewegungen:

override func update(currentTime: CFTimeInterval) { 
    print(sprite1.position) 
} 

P. S.:

Falls Sie Hinweise über das Objekt hervorgebracht haben nicht basierend zum Beispiel Sie können auch einen Namen auf ein generisches Objekt geben, indem ein Wort zu einem Zähler gefolgt (dies ist nur ein Beispiel):

for i in 0..<10 { 
    var spriteTexture = SKTexture(imageNamed: "sprite.png") 
    let sprite = SKSpriteNode(texture: spriteTexture, size: spriteTexture.size) 
    sprite.name = "sprite\(i)" 
    self.addChild(sprite) 
} 

Danach abzurufen/Wieder erhalten Ihre Sprite tun:

let sprite1 = self.childNodeWithName("sprite1") 
+0

das einzige Problem, ist, dass es nicht nur ein Sprite ist es endlose Anzahl von ihnen –

+0

gibt es kein Problem, wenn Ihr Objekt einen Namen wie spritex.name = "Sprite1" zu selbst wie self.addChild (Sprite1) hinzugefügt haben Sie suchen können Lassen Sie sprite1 = self.childNodeWithName ("sprite1") und Sie erhalten Ihr Objekt wieder –

+0

Ich habe meine Antwort aktualisiert, sehen Sie, ob es Ihnen helfen kann. –

0

Es gibt wahrscheinlich hundert verschiedene Möglichkeiten, dies zu tun. Hier ist, wie ich es machen würde.

in Ihrem Update func

checkForCollisions() 

dies scrollt nur durch „Hindernisse“, die Sie zufällig generieren und Ort wem auch immer Sie die Farbe Trigger passieren soll. Sie können alles sein, was Sie wollen, ändern Sie einfach den Namen passend. Wenn sie Ihren "Ball" überlappen, dann können Sie das eine oder das andere färben.

func checkForCollisions() { 

    self.enumerateChildNodesWithName("obstacles") { node, stop in 

     if let obstacle: Obstacle = node as? Obstacle { 

      if self.ball.intersectsNode(obstacle) { 

       //color node or ball whichever you want 
      } 
     } 
    } 
} 
+0

ich werde es versuchen Minuten in Paar, aber es gibt keine Hindernisse in den Ball Art und Weise, sie links oder rechts gehen und die dies nicht tun kontaktieren Sie eine Sache –

+0

Hindernisse ist nur etwas, was ich als Platzhalter verwendet. Sie haben nicht genügend Informationen gegeben, um den für Sie relevanten Code zu verwenden. Sie sagen "Knoten", aber zeigen keine Codes für "Knoten" und Sie sagen "self.ball", aber zeigen Sie keinen Code für "self.ball". Jeder, der dir helfen wird, muss raten oder einfach nur generischen Code verwenden. –