2016-06-09 6 views
0

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:

Before animation

Während Animation:

During animation

(Beachten Sie, wie das Bild von seiner ursprünglichen Position verschoben wurde, weil SK es zentriert hält :-()

Nach Animation:

After animation has been cancelled

(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

Antwort

0

Ich denke, die Animation ist zu entfernen, bevor es natürlicher Zyklus ist.

let actionTexture = SKAction.animateWithTextures(textures, timePerFrame: 0.1, resize: true, restore: true) 
sprite.runAction(actionTexture, count:30) // 30 x 0.1 = 3 sec tot animation 

// REMOVE TIMER (oder verwenden Sie Aktion mit wait)

+0

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

+0

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 –

Verwandte Themen