2016-12-06 2 views
2

Ich habe zwei Knoten node1 und node2. Knoten1 ist auf Position 0. Wenn ich auf den Bildschirm klicke, wird seine Aktion ausgeführt, bis sie in der Mitte des Bildschirms erscheint oder der Benutzer den Finger vom Bildschirm entfernt. Sobald node1 die Mitte des Bildschirms erreicht, wird es gestoppt und node2 wird seine Aktion ausführen. Mein Code macht das bisher.spritekit wie zwei SKAction auf zwei verschiedenen Knoten zu überführen

Damit jedoch node2 seine Aktion ausführen kann, muss der Benutzer seinen Finger vom Bildschirm entfernen und ihn erneut berühren. Ich möchte nicht, dass das passiert. Ich möchte, dass die Aktion für node2 ausgeführt wird, nachdem node1 beendet wurde, ohne dass der Benutzer seinen Finger vom Bildschirm entfernt hat.

Im Grunde hält der Benutzer den Bildschirm node1 hält seine Aktion beendet und dann führt node2 seine Aktion aus.

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 

    let Node1Move=SKAction.moveBy(x:50,y:0,duration:0.6) 
    let node1rep=SKAction.repeatForever(Node1Move) 
    node1.run(node1rep) 

    if modeNode2==1{ 
     let node2move=SKAction.moveBy(x:-10,y:0,duration:0.9) 
     let node2Rep=SKAction.repeatForever(node2move) 
     node2.run(node2Rep) 
    } 

} 
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) { 

    node1.removeAllActions() 
    node2.removeAllActions() 
} 

override func update(_ currentTime: TimeInterval) { 
    if node1.position.x+node1.frame.width > self.frame.width/2{ 
     node1.removeAllActions() 

     moveNode2=1 
    } 

} 
+0

ich müde, um die Knoten2 Aktionen in Update setzen, aber das hat nicht funktioniert. –

+2

Es gibt eine Sequenzaktion, mit der Sie mehrere Aktionen in einer Kette nacheinander ausführen können. Ich bin mir nicht sicher, ob das hilft, also werde ich das nicht als eine Antwort betrachten, aber schau es dir an. –

Antwort

2

touchesBegin wird nur einmal ausgelöst, also wird Ihr moveNode2 == 1 nichts tun. Anstatt moveBy zu verwenden, benutze moveTo und node1 moveTo zur Mitte des Bildschirms - node1 width. Dann füge einfach einen Completion-Block zu node1.run hinzu.

Hinweis: Möglicherweise müssen Sie die Dauer ändern, nicht sicher, woher diese Zahlen stammen. Wenn Sie auf den Benutzer planen ständig sein auf den Bildschirm tippen, dann tun nur totalDuration = 3 * (node1.x - 'node1 start x')/((self.frame.width/2 - node1.frame.width) - 'node1 start x')

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 

    let Node1Move=SKAction.moveTo(x:self.frame.width/2 - node1.frame.width,y:0,duration:3.0) 
    node1.run(Node1Move) 
    { 
     let node2move=SKAction.moveBy(x:-10,y:0,duration:0.9) 
     let node2Rep=SKAction.repeatForever(node2move) 
     node2.run(node2Rep) 
    } 

} 

override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) { 

    node1.removeAllActions() 
    node2.removeAllActions() 
} 
+0

Danke, es hat funktioniert !! –

+0

Sie sind herzlich willkommen – Knight0fDragon

Verwandte Themen