2016-12-21 4 views
2

Der Code Block in einer SKAction.run Aktion wird aus irgendeinem Grund nie ausgeführt.Code innerhalb von SKAction run Aktion nicht ausgeführt

Um zu verdeutlichen, sind es die zwei Zeilen innerhalb startAction, die nie aus irgendeinem Grund ausgeführt werden, obwohl die anderen Zeilen ausgeführt werden.

Das Setzen von Haltepunkten in diese Zeilen beweist, dass diese Zeilen niemals ausgeführt werden.

Irgendwelche Anhaltspunkte warum?

// Set first frame 
    let firstFrame = frames[0] 
    let animationNode = SKSpriteNode(texture: firstFrame) 
    animationNode.position = CGPoint(x: x, y: y) 

    // Set start action 
    let startAction = SKAction.run({ 
     gAudio.playSound(file: .TestSound) // Never runs 
     self.animationLayer.addChild(animationNode) // Never runs 
    }) 

    // Set rest of animation 
    let timePerFrame = 0.5 
    let animationAction = SKAction.animate(with: frames, timePerFrame: timePerFrame, resize: false, restore: true) 
    let removeAction = SKAction.removeFromParent() 
    let animationSequence = SKAction.sequence([startAction, animationAction, removeAction]) 

    // Run animation 
    animationNode.run(animationSequence) 
+1

Lauf starten ist unmittelbar, aber der Block auf eine Warteschlange gehen und nicht in exaktem Zeitlauf genannt wird Feuer garantiert, Sobald sie ausgelöst wird, wird die nächste Sequenz ausgelöst, wodurch der Knoten vom Elternknoten entfernt wird, bevor irgendetwas im Lauf passieren kann. – Knight0fDragon

+0

@ Knight0fDragon Vielen Dank, warum nicht als Antwort posten? Das scheint das Problem zu erklären, oder? – Crashalot

+0

nur wenn die Animation nicht ausgeführt wird – Knight0fDragon

Antwort

2

Aktionen werden nicht für einen Knoten feuern, bis er auf der Bühne platziert ist, haben Sie ein Huhn und Ei Dilemma hier los ist. Sie möchten den Knoten (Ei) zur Szene (Huhn) hinzufügen, nachdem der Knoten (Ei) in der Welt existiert (Huhn bringt das gleiche Ei zur Welt). Sie müssen etwas haben, sonst platzieren Sie den Knoten in der Szene, dann kann der Knoten die Aktionen ausführen.

Zeigen Sie mit Startaktion auf der Szene, und nicht Ihren Knoten, und es sollte laufen

+0

setzen Danke nochmal! Tatsächlich war der Teil Ihrer Erklärung, der am aufschlussreichsten erschien, der Teil über die Timing-Aktionen und wie man eine Abfolge von Aktionen garantiert, die die 'run'-Aktion beinhalten. Möchten Sie dieses Bit auch einbeziehen? – Crashalot

+1

nein, weil es nicht zu Ihrem Problem gehört und nur Leute verwirren – Knight0fDragon

+0

OK, nochmals vielen Dank! – Crashalot

Verwandte Themen