2010-01-20 17 views
6

Ich möchte, dass mein Movieclip einmal abgespielt wird und auf dem letzten Frame stoppt. Ich verwende den folgenden Code in der Schleife meiner Movieclip-Klasse. (das ist as3)Anhalten auf dem letzten Frame (Flash)

120 ist der letzte Rahmen. Es spielt einmal. aber das Problem ist, dass es wieder zu Frame 1 geht. Gibt es eine bessere Methode, einen Movieclip in einem bestimmten Frame anzuhalten?

+1

Haben Sie am Ende eine richtige Antwort gefunden? Wenn ja, bitte markieren Sie es als korrekt –

Antwort

1

war es, weil das Objekt zweimal aufgerufen wurde.

3

Auf der Timeline können Sie einfach einen Keyframe am Ende platzieren und die stop(); Methode dort hinzufügen. Wenn es diesen Rahmen erreicht, wird die stop(); Methode ausgeführt, und der Clip wird gestoppt.

Vorausgesetzt, Sie verwenden die Timeline, die ist, aber klingt wie du bist.

+0

Ich verwende eine benutzerdefinierte Klasse an den MovieClip. Ich würde es gerne von dort aus machen, aber wenn ich es nicht kann, würde ich mich mit Ihrer Lösung zufrieden geben. – numerical25

+0

Ich gab das einen Versuch und es hat nicht funktioniert. Es begann immer noch von Frame 1 aus. Ich habe den currentFrame verfolgt. zeigt, dass es zurückgeht auf 1 – numerical25

+0

Nun, das bedeutet, dass etwas anderes vor sich geht. Arbeiten Sie mit verschachtelten MovieClips, um die Animation zu erstellen? Werden sie richtig gestoppt? Vielleicht können Sie uns helfen, wenn Sie mehr darüber erfahren, wie Sie die Dinge einrichten können. –

0

Dies scheint mehr entlang den Linien von dem, was Sie suchen:

addEventListener(Event.ENTER_FRAME, function(e:Event){ 
    if(currentFrame == totalFrames){ 
     stop(); 
     removeEventListener(event.type, arguments.callee); 
    } 
}); 

ich einen Ereignis-Listener hinzugefügt (für Actionscript 3) so auf jedem Frame wird Feuer diese Funktion und überprüfen, was er eingeschaltet ist einrahmen . Wenn es das letzte Bild ist, wird es aufhören. Basierend auf Ihrem Beispiel nehme ich an, dass Sie eine Klasse haben, die MovieClip erweitert.

+1

Das würde funktionieren, ist aber eine ziemlich schlechte Lösung in Bezug auf die Leistung. Dieser Enterframe wird danach weiter feuern, ohne dass es aufgeräumt werden kann. Eine bessere dynamische Lösung wäre die Verwendung der addFrameScript-Methode. Natürlich, wenn Sie einen Verweis auf die Funktion hätten, könnten Sie es aufräumen, und es wäre in Ordnung. –

+0

Ich stimme Tyler zu. Anonyme Funktionen sind auch schlecht, da sie länger im Speicher sitzen, bevor sie aktiviert werden. – alecmce

+0

Also ich denke, die stop() -Funktion in der TimeLine ist der Weg zu gehen? Ich verwende eigentlich eine einzige Schleife für alle meine Movieclips, also würde ich es vorziehen, wenn es nicht in einem Event-Listener wäre. Danke für die Antworten Jungs – numerical25

0

von rumspielen, ich weiß, das Problem hat nichts mit Flash zu tun, der nicht auf meine stop() Funktion reagiert. Ich glaube, es könnte etwas damit zu tun haben, dass Flash den Movieclip zweimal aufruft. Einer über dem anderen. Es sieht so aus, als ob es von vorne angefangen hätte. Ich bin nicht sicher. Wenn ich den Movieclip anderswo anrufe, funktioniert es. nur nicht in meiner Schleife. Ich habe eine Spur gemacht und die Spur ist nur einmal aufgetaucht, was zeigt, dass sie einmal ausgelöst wurde.

12

Wenn Sie es mit Actionscript tun möchten und nicht manuell ein stop() zum letzten Frame auf der Timeline hinzufügen, können Sie die undokumentierte Methode addFrameScript() verwenden.

mc.addFrameScript(mc.totalFrames - 1, function():void 
{ 
    mc.stop(); 
}); 

Kann den Umfang der Funktion nicht mehr erinnern, aber sie entweder mc.stop() verwenden, oder einfach nur stoppen().

* EDIT-Added -1 auf den ersten Parameter von addFrameScript, weil es null basiert ist (so ein Frame auf dem Rahmen setzen würden Sie setzen).

+0

Sie sind ein Lebensretter! Ich habe nicht einmal darüber nachgedacht, der Timeline Stopps hinzuzufügen und 'play' nur dann zu nennen, wenn ich es brauche. –

0

Ich fand es heraus. Ehrlich gesagt denke ich, dass meine Bewerbung fehlerhaft ist. Es hat wunderbar funktioniert und ich habe nichts getan. In meiner Schleife habe ich das if (currentframe == totalframes) gemacht und was vorher nicht passierte ist nun perfekt. Ich weiß nicht warum. Aber wie ich schon sagte, es könnte ein Softwareproblem sein, weil ich manchmal Probleme habe, Werte durch Konstruktoren zu übergeben. Und müssen spezielle Methoden erstellen, um diese Werte zu akzeptieren.

3

Der einfachste Weg:

  1. Wählen Sie einfach das letzte Bild in der Timeline. Öffnen Sie den Aktionsbereich (F8). Vergewissern Sie sich, dass der ausgewählte Rahmen immer noch ausgewählt ist. Wenn nicht, wählen Sie ihn erneut, während der Bereich "Aktionen" geöffnet ist.
  2. Nach der Auswahl fügen Sie einfach die einfache stop() - Funktion im Bereich 'Aktionsrahmen' hinzu.

    //add the following line to the actions pane of the last frame. 
    stop(); 
    
  3. Sie sind fertig. Sie können optional bei Bedarf eine Wiedergabeschaltfläche hinzufügen.

+0

Wenn es nicht mit Ihrer benutzerdefinierten Klasse – Sagar

+1

Sessellern Ich weiß nicht, welches Tool Sie verwenden, aber es scheint, als ob Sie Adobe Flash verwendet. Wenn Sie Adobe Flash CS6 verwenden, öffnen Sie das Bedienfeld "Aktionen" (F8). Öffnen Die Aktionsleiste ist (F9). – kongkea

Verwandte Themen