ich SKAction.animateWithTextures
bin mit einem SKSpriteNode
in Swift, mit dem Parameter restore
Satz true
animieren. Wie in a different thread beschrieben, tritt ein erstes Problem auf, weil die Bilder in dem Texturatlas geringfügig größer als der ursprüngliche Knoten sind. Nun ist ein weiteres Problem aufgetreten: Wenn ich die Animation unter Verwendung von SKSpriteNode.removeAllActions()
unterbreche, wird der Knoten auf die ursprüngliche Textur zurückgesetzt, aber die Größe des Knotens wird nicht auf das Original zurückgesetzt, was zu einem verzerrten Bild führt, da die Texturen im Atlas größer sind .SKSpriteNode - Textur nicht auf Originalgröße nach Unterbrechung animateWithTextures gestellt
Also, vorausgesetzt, ich meine Texturen (etwas größer als das Original) in einem Array haben textures
genannt, hier ist ein Ausschnitt, der es tun sollten:
{
// ...
sprite.runAction(SKAction.animateWithTextures(textures, timePerFrame: 1, resize: true, restore: true))
NSTimer.scheduledTimerWithTimeInterval(3, target: self, selector: #selector(test), userInfo: nil, repeats: false)
// ...
}
func test() {
sprite.removeAllActions()
}
Hinweis: Dieses Beispiel verwendet ein Timer nur emuliert zufällige Unterbrechung der Animation. In der Spielwelt kann die Animation zu einer unbekannten Zeit abgeschlossen oder unterbrochen werden (typischerweise wenn ein Kontakt mit einem anderen Sprite auftritt).
Nach der Ausführung wird das Sprite auf seine ursprüngliche Textur zurückgesetzt, aber gestreckt, um der Größe der Texturen im Atlas zu entsprechen. Ich habe das xScale
Attribut überprüft, aber es ist natürlich 1.0
... Hier ist das visuelle Ergebnis:
Vor Animation:
Während Animation:
(Beachten Sie, wie das Bild von seiner ursprünglichen Position verschoben wurde, weil SK es zentriert hält :-()
Nach Animation:
(jetzt sieht sie nur Fett)
Bin ich dies der falsche Weg, oder ist das ein Bug, oder gibt es eine Möglichkeit, es zu beheben?
Danke!
David
Danke für die Antwort:
versuchen, eine Aktion wie hinzuzufügen. Der Punkt ist, ich weiß nicht im Voraus, wann die Animation unterbrochen werden könnte - es ist ein Ereignis, das zufällig auftreten kann, während die 'animateWithTextures' Aktion ausgeführt wird, also kann ich es nicht so ablaufen lassen. Was ich erreichen möchte, ist, dass die Aktion vollständig ausgeführt wird, wenn nichts passiert, aber das Sprite wird in seinen ursprünglichen Zustand (ursprüngliche Textur + Größe) zurückgesetzt, wenn es unterbrochen wird. Nochmals, die Tatsache, dass die ursprüngliche Textur wiederhergestellt wird, aber nicht die Größe, sieht irgendwie wie ein Fehler für mich aus, oder es gibt einen Parameter, den ich nicht richtig einstelle. – David
Ist Ihr Bug schwer zu verstehen, aber Sie können es bei runaction mit Abschlussblock erzwingen und Textur und Größe einstellen, sobald die Animation beendet ist –