Come ben tutti sapete, non esiste un "metodo" per modificare il frame rate di un filmato. Però possiamo aumentare o diminuire la velocità di riproduzione del filmato tramite ActionScript. Come?? Iniziamo prima a capire come funziona il tutto.
Se ad esempio impostiamo il fps del filmato a 24, significa che flash leggerà 24 frames ogni secondo, Ossia passerà da un frame all'altro ogni 1000 millisecondi / 24 fps = 41,666.. millisecondi.
Quindi se vogliamo che il nostro filmato vada a 12 fps (o 48) basta passare da un frame all'altro ogni:
1000/12 = 83,333 millisecondi o 1000/48 = 20,83333 millisecondi
A questo punto vi state chiedendo come poter passare da un frame all'altro impostando noi il tempo. In flash MX esiste l'opzione setInterval.
Il setInterval è un azione che chiama una funzione a intervalli regolari durante la riproduzione di un filmato.
Quindi per far andare il nostro filmato a 12 fps (quando a priori è stato impostato 24) basterà richiamare una funzione (vedremo in seguito le azioni che effettuerà questa function) ogni 83 millisecondi circa. Dico circa perchè difficilmente la funzione verrà richiamata ogni 83 ms, ma solitamente l'intervallo è più lungo di qualche millisecondo. Ciò può causare un fps falso, ossia impostando 12 fps in realtà andremo quasi a 11 fps. Se questo margine di errore è troppo evidente, possiamo ovviare aumentando il divisore. Invece di dividere per 12 dividiamo per 13, e ci ritroveremo un fps intorno ai 12.
Vediamo lo script:
sul primo frame del MovieClip (o sulla _root del filmato) scriviamo:
Questo script va bene se vogliamo che il filmato vada in loop, ossia se arrivato all'ultimo frame deve ricominciare da capo. Se invece vogliamo che arrivato all'ultimo frame si fermi, basta sostituire gotoAndStop(1) con clearInterval(a).codice:function avanti() { (_currentframe == _totalframes) ? gotoAndStop(1) : nextFrame(); } _root.onLoad = function() { stop(); fps = 1000/25; //impostiamo un fps uguale a 24 a = setInterval(avanti, fps); };
qui trovate un esempio:
esempio
ho riscontrato seri problemi solo con IE (vers. 6.0) mentre va molto bene con NN (vers. 7.0), usando il proiettore (file .exe) o semplicemente aprendo il .swf
Spero che possa servire,
Ciauz![]()