.. ho implementato un sistemino per fare l'effetto dissolvenza in entrata e in uscita... ma vorrei sapere se esiste una funzione più veloce di quella che ho fatto io.
Voi come implementate la dissolvenza? Si riesce solamente via AS senza che sia troppo veloce?
Ho provato con un semplice ciclo while ma è troppo veloce e sembra quasi che il suono aumenti o diminusca di colpo... quindi uso un clip secondario per fare in modo che avvenga gradatamente...
Ciao .. con un ciclo while è ovvio che è troppo veloce.. tutte le azioni eseguite in un ciclo del genere vengono eseguite "nello stesso istante" .. potresti tuttalpiù utilizzare un evento enterFrame o un setInterval o altri metodi che creano un ciclo scandendo però le ricorrenze nel tempo.
Proprio qualche giorno fa ho risposto ad una discussione riguardo lo stesso argomento, e ho sviluppato una funzioncina per creare l'effetto fade.
Metto qui il link della discussione e riporto poi sotto la funzione ottimizzata, sperando possa tornare utile dato che l'autore dell'altra discussione non ha risolto per via di altri motivi: http://forum.html.it/forum/showthrea...=&pagenumber=1
Tale funzione fa uso della classe Tween che appunto crea una sorta di ciclo in cui viene incrementata o decrementata una variabile, passata poi come valore del volume di un oggetto sound.
La funzione è riutilizzabile per qualsiasi oggetto sound potendo quindi gestire vari suoni separatamente.
Codice PHP:
// creo degli oggetti sound applicandoli a dei mc contenitori
var suono1 = new Sound(_root.createEmptyMovieClip("snd1", 1));
var suono2 = new Sound(_root.createEmptyMovieClip("snd2", 2));
//
// associo dei campioni che ho inserito in libreria con proprietà di concatenamento
suono1.attachSound("campione 1");
suono2.attachSound("campione 2");
//
// funzione soundFade (oggetto sound, volume iniziale, volume finale, durata del fade, [azione], [loops])
var soundFade:Function = function (snd:Object, ini:Number, end:Number, duration:Number, action:Boolean, loop:Number):Void {
(snd.fade) && (snd.fade.stop());
(ini == null) ? ini=snd.getVolume() : snd.setVolume(snd.vol);
(action == "start") && (snd.start(0, loop));
snd.fade = new mx.transitions.Tween(snd, "vol", mx.transitions.easing.Regular.easeOut, ini, end, duration, true);
snd.fade.onMotionChanged = function() {
snd.setVolume(snd.vol);
};
if (action == "stop") {
snd.fade.onMotionFinished = function() {
snd.stop();
};
}
};
// ----------------------------------------------------
// varie modalità di applicazione della funzione soundFade
//
// fade-in da 0 a 100 in 4 secondi con start dell'oggetto sound indicato e loop infinito
soundFade(suono1, 0, 100, 4, "start", 999);
//
// fade-out dal volume corrente a 0 in 5 secondi con stop al termine
soundFade(suono1, null, 0, 5, "stop");
//
// fade da 20 a 80 in mezzo secondo
soundFade(suono1, 20, 80, .5);
//
// mix tra due tracce in 10 secondi
suono1.start();
soundFade(suono1, 100, 0, 10, "stop");
soundFade(suono2, 0, 100, 10, "start")
Si tratterà inizialmente di creare i vari oggetti sound e associarli a diverse istanze in modo da poterli gestire separatamente.
Quindi la funzione soundFade potrà essere richiamata specificando alcuni parametri tra cui la durata dell'effetto.
Ho indicato alcuni esempi nello script.