2010-01-20 16 views
6

Voglio che il mio Movie Clip venga riprodotto una volta e si fermi sull'ultimo fotogramma. Io uso il seguente codice nel ciclo della mia classe MovieClip. (questo è as3)arresto sull'ultimo fotogramma (flash)

if(currentFrame == 120) 
stop(); 

120 è l'ultimo frame. Suona una volta. ma il problema è che torna di nuovo al fotogramma 1. c'è un metodo migliore per fermare un Movie Clip su un particolare frame.

+1

Hai finito per trovare una risposta corretta? In tal caso, contrassegnarlo come corretto –

risposta

1

perché l'oggetto veniva chiamato due volte.

3

Sulla timeline, si può semplicemente mettere un fotogramma chiave alla fine, e aggiungere il metodo stop(); lì. Quando raggiunge tale frame, verrà eseguito il metodo stop(); e la clip si interromperà.

Supponendo che si stia utilizzando la timeline, ma suona come se fossi.

+0

Sto utilizzando una classe personalizzata collegata al MovieClip. Mi piacerebbe farlo da lì, ma se non posso, credo che avrei dovuto accontentarmi della soluzione. – numerical25

+0

Ho provato e non ha funzionato. è ancora iniziato dal fotogramma 1 di nuovo. Ho tracciato il currentFrame. mostra che risale al 1 – numerical25

+0

Bene, questo significa che c'è qualcos'altro che sta succedendo. Stai lavorando con MovieClip nidificati per creare l'animazione? Sono stati fermati correttamente? Forse se puoi condividere di più su come hai configurato le cose, possiamo aiutarti a rintracciarlo. –

0

Questo sembra più lungo le linee di quello che stai cercando:

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

ho aggiunto un listener di eventi (per Actionscript 3) in modo su ogni fotogramma di questa funzione si attiverà e verificare che cosa telaio è su . Se è l'ultimo fotogramma, si fermerà. Sulla base del tuo esempio presumo che tu abbia una classe che sta estendendo MovieClip.

+1

Funzionerebbe, ma è una soluzione piuttosto scadente in termini di prestazioni. Questo enterframe continuerà a sparare in seguito, senza alcun modo di ripulirlo. Una soluzione dinamica migliore simile a questa sarebbe utilizzare il metodo addFrameScript. Naturalmente se tu avessi un riferimento alla funzione, potresti pulirla, e andrebbe bene. –

+0

Sono d'accordo con Tyler. Anche le funzioni anonime sono cattive, dal momento che rimangono in memoria per molto più tempo prima di essere gc. – alecmce

+0

Quindi immagino che la funzione stop() nel timeLine sia la strada da percorrere ??. In realtà sto usando un singolo ciclo per tutti i miei Movie Clip, quindi preferirei se non fosse in un listener di eventi. grazie per le risposte ragazzi – numerical25

0

da fare in giro il motto di spirito, so che il problema non ha nulla a che fare con il flash non risponde alla funzione() la mia fermata. Credo che possa avere qualcosa a che fare con il flash chiamando due volte il Movie Clip. Uno sopra l'altro. Facendolo apparire come se fosse ricominciato. Non sono sicuro. Se chiamo il Movie Clip da qualche altra parte, funziona. solo non nel mio ciclo. Ho fatto una traccia e la traccia si è mostrata solo una volta che mostra che è stata avviata una sola volta.

12

Se si desidera farlo con actionscript e non aggiungere uno stop() all'ultimo fotogramma sulla timeline manualmente, è possibile utilizzare il metodo addFrameScript() non documentato.

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

non riesce a ricordare la portata della funzione, ma è possibile utilizzare mc.stop(), o solo stop().

* EDIT - aggiunte -1 al primo parametro di addFrameScript, perché è a base zero (in modo da mettere una frameScript sul telaio si metterebbe).

+0

Sei un risparmiatore di vita! Non ho nemmeno pensato di aggiungere stop alla timeline e semplicemente chiamare 'play()' quando ne ho bisogno. –

0

ho capito. Onestamente, penso che la mia domanda sia difettosa. Ha funzionato miracolosamente e non ho fatto niente. Nel mio ciclo ho fatto if (currentframe == totalframes) e quello che non è successo prima ora sta accadendo perfettamente. Non so perché. Ma come ho detto, potrebbe trattarsi di un problema di software perché a volte ho problemi a trasmettere i valori attraverso i contructor. E devono creare metodi speciali per accettare quei valori.

3

modo più semplice:

  1. basta selezionare l'ultimo fotogramma nella linea temporale. Aprire il riquadro Azioni (F8). Assicurarsi che la cornice selezionata sia ancora selezionata, in caso contrario selezionare nuovamente mentre il riquadro Azioni è aperto.
  2. Dopo aver selezionato, aggiungi semplicemente la funzione stop() nel riquadro 'Action-Frame'.

    //add the following line to the actions pane of the last frame. 
    stop(); 
    
  3. Il gioco è fatto. È possibile aggiungere un pulsante di ripetizione se necessario.

+0

se non si adatta alla classe personalizzata – Sagar

+1

Non so quale strumento usi, ma sembra che tu abbia usato Adobe Flash. se si utilizza Adobe Flash CS6, aprire il pannello Azioni (F8) è errato. Apri Il pannello Azioni è (F9). – kongkea

Problemi correlati