Flash: presentazione su CD

Di: laufiore | 26/09/2020 18:48:18
Ciao a tutti, sto preparando una semplice presentazione in Flash composta da 15 filmati brevi che dovrei "incollare" uno dietro l'altro in un file principale (con loadMovie)...quello che vorrei sapere è se questi filmati devono necessariamente avere lo stesso frame rate oppure no...
Secondo dubbio: il filmato non dovrà essere distribuito in rete ma solo visualizzato da CD...dovrei inserire un precaricatore o è una funzione utile solo nel caso si utilizzi internet? In altre parole: c'è il rischio che il filmato "scatti" quando viene visualizzato da CD??Grazie a chi riuscirà a darmi una mano!!

Risposte



Ciao laufiore,
grazie per avere scelto 001design.it.
Il framerate di un filmato flash non può essere cambiato in runtime (come in Director, per esempio), quando crei un filmato principale in Flash e poi carichi dei filmati esterni al suo interno il framerate rimarrà quello del filmato principale.
Per quanto riguarda il preload ti dico che in genere non è necessario per i CD, anche un filmato da 5 mega viene caricato quasi istantaneamente (e più il lettore è veloce, meno tempo ci vuole)... ma essendo una cosa semplice da implementare io lo metto su tutto, anche sui contenuti per CD, la cosa peggiore che può succedere è che non vedi il preload perché i contenuti sono stati caricati troppo velocemente.

Di: Professore | 26/09/2020 18:48:18


Tempo fa feci un cd con flash, anche nel mio caso c'erano dei file esterni, tra l'altro abbastanza pesanti, in quell'occasione ebbi modo di constatare che i preload, nel caso dei cd non funziona, la riproduzione del movie viene congelata finche il file esterno non è completamente caricato.
Navigando nei vari forum, ebbi conferma.

Di: goku | 26/09/2020 18:48:18


grazie per le risposte...adesso sono un pò in crisi perchè uno dei miei filmati ha un framerate di 24 e se lo riporto a 12 come gli altri il testo che contiene, e che scorre dal basso verso l'alto, inizia a "scattare" mentre si muove (motivo per cui gli avevo cambiato framerate!)...non c'è un altro modo di risolvere il problema? So che una possibilità sarebbe quella di portare tutti i filmati a 24 fps ma il lavoro mi sembra infinito e non credo di avere tempo. Comunque se è l'unica soluzione...

Di: laufiore | 26/09/2020 18:48:18


Una soluzione sarebbe quella di far girare separatamente i filmati in Flash, ognuno avrà il suo framerate e lo rispetterà.
Puoi scegliere di aprire finestre separate, oppure puoi creare in qualche modo un "contenitore" che rispetti il framerate originale, per esempio se usi gli oggetti Flash dentro Director il loro framerate non viene intaccato ed è completamente indipendente dal framerate dello score.
In alternativa, se i tuoi filmati non sono interattivi puoi renderizzarli come video e caricarli dentro Flash, il framerate del video non dipende dal framerate del filmato SWF che lo contiene.

Di: Professore | 26/09/2020 18:49:18


E poi dicono che i manuali non servono!
La soluzione al tuo problema è il comando setInterval, la descrizione la trovi nella guida in linea, ti posto un esempio:
crea un nuovo progetto, 3 livelli, sul 1 livello crei un movie clip (mc1), sul 2 livello fai la stessa cosa, cambierai solo nome istanza del clip (mc2), sul 3 livello inserisci questo codice:
muovi = function () {
_root.mc1._x++;
updateAfterEvent();
};
interval = setInterval(muovi, 1);
///////////////////////////////////////////////
this.onEnterFrame=function(){
this.mc2._x++;
}
guarda tu stesso la differenza!
Ciao.

Di: goku | 26/09/2020 18:49:18


proverò ad usare setInterval, dopo avere capito meglio come funziona...grazie!

Di: laufiore | 26/09/2020 18:49:18

Flash: due parole su setInterval()

Quanto mi piace questo forum!!!
Se goku mi permette scrivo due parole riguardo a setInterval().
La funzione setInterval ci permette di richiamare ciclicamente un'altra funzione o un metodo di un oggetto.
Una volta richiamato setInterval viene creato un intervallo, questo intervallo avrà un ID numerico e sarà eseguito ciclicamente senza interferire con la linea temporale.
Sono necessari almeno due argomenti per iniziare un intervallo utilizzando questa funzione:
-Il primo argomento deve essere l'identificativo della funzione o del metodo che vogliamo eseguire ripetutamente.
-Il secondo argomento è il numero di millisecondi che passa tra un'esecuzione e l'altra.
-Eventuali altri argomenti vanno aggiunti dopo, saranno passati alla funzione che viene richiamata.
Adesso passiamo all'esposizione per esempi dell'uso della funzione setInterval.
Data una funzione, per esempio questa:
function salutami() {
trace("ciao");
};
possiamo chiedere a Flash di eseguirla ogni secondo richiamandola con un intervallo:
setInterval(salutami, 1000);
Questa è la funzionalità base del setInterval, il rigo di codice in rosso crea un intervallo che esegue ogni secondo (ogni 1000 millisecondi) il contenuto della funzione chiamata salutami.
Un intervallo continua fino a quando non viene fermato, per fermarlo dobbiamo usare la funzione clearInterval.
La funzione clearInterval ha bisogno di sapere quale intervallo deve terminare, infatti possiamo avviare molti intervalli contemporaneamente. Quindi ci serve conoscere l'ID numerico dell'intervallo che vogliamo terminare.
L'unico modo di conservare un ID di un intervallo è usare una variabile che lo conservi, quindi invece di scrivere semplicemente setInterval come abbiamo fatto sopra useremo questo sistema:
mioIntervallo = setInterval(salutami, 1000);
mioIntervallo è una variabile che contiene un numero intero, questo numero è l'ID dell'intervallo che abbiamo creato.
Conservare l'ID dell'intervallo ci permette di usare clearInterval, in questo modo:
clearInterval(mioIntervallo);
Questo rigo ci permette di interrompere l'intervallo che avevamo creato prima.
Ora vediamo come passare dei parametri alla funzione che intendiamo richiamare....
Data la seguente funzione:
function saluta(nome) {
trace("ciao "+nome);
};
possiamo richiamare un intervallo di questo tipo:
setInterval(saluta, 1000, "Professore");
I primi due argomenti sono, come sopra, l'identificativo della funzione da richiamare e il numero di millisecondi da attendere tra un'esecuzione e l'altra, il terzo argomento verrà passato alla funzione richiamata.
Se avessimo avuto più argomenti da passare, avremmo dovuto scriverli in ordine, per esempio questa è una funzione che ha bisogno di tre parametri con un intervallo che la richiama passando tutti e tre i parametri:
function saluti(nome, cognome, citta) {
trace("ciao "+nome+" "+cognome+", che si fa di bello a "+citta+"?");
};
setInterval(saluti, 1000, "Pippo", "Calzetta", "Topolinia");
Se abbiamo creato molti intervalli e non ci siamo ricordati di conservare l'ID di ognuno sarebbe utile una funzione che ci permettesse di fermare tutti questi intervalli contemporaneamente, purtroppo non esiste in Flash una funzione specifica, ma sapendo che ogni intervallo ha comunque un ID e che questo ID è un numero intero, possiamo scrivere qualcosa di questo genere:
for (i=1; i<=100; i++) {
clearInterval(i);
}

Che annulla i primi 100 intervalli che abbiamo richiamato, 100 mi sembra un numero abbastanza alto, per cui credo che li becchiamo tutti.
Questa è la procedura che uso io in questi casi, invece il metodo consigliato da Macromedia consiste nel dichiarare le funzioni come metodi di un oggetto generico.
Quindi si crea un oggetto, si assegnano tutte le funzioni a quell'oggetto e si avviano gli intervalli per tutte le funzioni che ci servono. Quando avremo bisogno di cancellare tutti gli intervalli ci basterà distruggere l'oggetto in questione, perderemo tutte le funzioni (metodi) in esso dichiarati e gli intervalli relativi.
Esempio per creare un oggetto, assegnargli un metodo e richiamare l'intervallo:
mioOggetto = new Object();
mioOggetto.interval = function(s) {
trace(s);
};
setInterval(mioOggetto, "interva", 1000, "richiamato intervallo");
Quando vogliamo distruggere tutto basta scrivere:
delete mioOggetto;
In questo caso le funzioni e i metodi non saranno disponibili per essere richiamati successivamente, per questo motivo non utilizzo questo sistema.

Di: Professore | 26/09/2020 18:49:18


I miei complimenti a Professore per la descrizione del comando, nick appropriato direi!
Per completezza di informazione vorrei aggiungere che per quanto riguarda il secondo metodo illustrato da Professore, è possibile rendere l'ID dell'intervallo una proprietà dell'oggetto, in questo modo possiamo eliminare un intervallo specifico senza eliminare l'oggetto stesso.
mioOggetto = new Object();
mioOggetto.interval = function(s) {
trace(s);
};
mioOggetto.intID =setInterval(mioOggetto, "interva", 1000, "richiamato intervallo");
per eliminare l'intervallo:
clearInterval(mioOggetto.intID);

Di: goku | 26/09/2020 18:50:18


in effetti con setInterval ho ottenuto un movimento del testo molto fluido...il problema è che non riesco a gestirne la posizione finale! Mi spiego: il mio testo al frame 1 si trova nella parte inferiore dello stage e al frame 180 deve arrivare a trovarsi per metà fuori dalla parte superiore dello stage. Impostando l'intervallo che rende il testo abbastanza fluido questo inizia a muoversi ma la posizione finale è quasi casuale, nel senso che pubblicandolo più volte (senza modifiche) mi è capitato di vederlo arrivare in posizioni diverse...come mai? Dipende dalla velocità di caricamento del computer? Come risolvo il problema? Grazie per la pazienza...

Di: laufiore | 26/09/2020 18:50:18