Controllo Audio con MouseOver ?!

Pubblicità

caramelleamare

Utente Attivo
Messaggi
31
Reazioni
0
Punteggio
25
Salve a tutti, ho una richiesta un po paticolare da fare:
Ho cretao un swf che al suo interno carica automaticamente quando la pagina parte, tramite un URL, un filmato.
Per necessità il filmato parte senza audio (proprietà-volume =0).
Mi è stato chiesto che un mouseover sullo stage attivi l'audio, e di conseguenza un mouseout lo disattivi. Il tutto possibilmente con un fade-in, parlo sempre del volume, e senza slider o controlli di nessun genere. Solo mouse over e mouse out!
E' possibile fare questa cosa?
 
Ciao scusa se ci ho messo un po ma ero impegnato,
immagino che per visualizzare il filmato usi il player di flash, l'FLVPlayback, giusto?Se è cosi fai cosi:
-Crea un MovieClip
-Dentro al MovieClip metti il filamto
-Dai al filmato il nome d'istanza "filmato"
-Poi metti il MovieClip sullo stage(o dove vuoi tu) e gli dai il nome d'istanza mc.
E poi usi questo codice:
Codice:
var alza:Boolean=false;
mc.addEventListener(MouseEvent.MOUSE_OVER,AudioGiu);
mc.addEventListener(MouseEvent.MOUSE_OUT,AudioSu);
addEventListener(Event.ENTER_FRAME,EnterFrame);
function AudioGiu(me:MouseEvent)
{
	alza=false;
	
}
function AudioSu(me:MouseEvent)
{
	alza=true;
}
function EnterFrame(e:Event)
{
	
	if(alza)
	{
		if(mc.filmato.volume<1)
			mc.filmato.volume+=0.01;
	}
	else
	{
		if(mc.filmato.volume>0)
			mc.filmato.volume-=0.01;
	}
}

Questo codice andrebbe inserito sul primo fotogramma della time line principale, se tu il MovieClip lo metti da un'altra parte devi ovviamente adattare il codice, idem se usi una classe esterna.
 
Per ora non riesco a farlo funzionare.
Allora: la situazione del mio progetto è leggermente piu complicata in quanto io ho uno stage dentro al quale c'è questo FLV che però è mascherato (se ne vede solo un po).
Allo stesso tempo c'è un pulsante che mi fa da area sensibile per far si che cliccandoci si apra la pagina con il trailer a dimensione normale.
Allora ho provato a fare il MC e poi dentro ho caricato FILMATO e gli ho fatto la maschera.
NON DA ERRORI nell'output, tutto il flash funziona, ma l'audio non lo sento proprio. MENTRE SENZA QUEL CODICE L'AUDIO SI SENTE NORMALMENTE.
Va beh ci sno sono troppi dettagli che dovrei dirti, non si fa prima se ti passo il FLA ? poi se riesci a farlo andare postiamo il codice che magari serve ad altri. E ti farò pure qualche domanda sul perche epercome di quel che hai fatto :)) per vedere se imparo qualcosa perche copiare e basta non mi diverte e non mi servirebbe.
Grazie comunque.
 
Correggo, non è che non funziona proprio, ma per attivarlo devo uscire ed entrare nell'area col mouse due o tre volte! Alla orima non funziona mai.
E non funziona in fase di MOUSE_OUT, cioè non diminuisce. Mah!
 
No, a questo punto davvero non capisco:
A volte non funziona, a volte funziona dopo due o tre passaggi, a volte si attiva nell'area cliccabile altre quando ne esco.
Ho provato fare un doc nuovo con MC che contiene FILMATO e nien'altro nello stage: non funziona mai.
Ho provato un altro doc con FILMATO e basta direttamente nello stage(moificando opportunamente il codice): non funziona mai.
A questo punto mi chiedo perche inserito nel mio doc di lavoro in parte sembri funzionare.

Inizialmente comunque avevo pensato di utilizzare questo codice:

var keyvar_menu1:Number = 0
clipmio.addEventListener(MouseEvent.MOUSE_OVER, buttonOverHandler1);
function buttonOverHandler1(MouseEvent) : void {
keyvar_menu1 = 1;
}
clipmio.addEventListener(MouseEvent.MOUSE_OUT, buttonOutHandler1);
function buttonOutHandler1(MouseEvent) : void {
keyvar_menu1 = 0;
}
clipmio.addEventListener(Event.ENTER_FRAME, MC_EF1);
function MC_EF1(MouseEvent) : void {
if (keyvar_menu1 == 1) {
????;
}
else if (keyvar_menu1 == 0) {
????;
}
}

inserendo al posto dei ???? il codice per aumentare il volume, che però no so quale sia.
 
ok posta il fla che ci do un'occhiata.
Scusa se ci metto un'po a rispondere ma sto studiando per degli esami...
 
Figurati, nessuno ti obbliga.
Il file lo trovi qui: http://www.megaupload.com/?d=EMYYOJ7Mhttp://www.megaupload.com/?d=65HY3QAL
Intanto ho scoperto che, per esempio, eliminando il livello dove c'è un pulsante che mi indica l'area sensibile per il link, gli effetti MOUSE_OVER e MUSE_OUT funzionano, pero L' OUT solo se rimani dentro lo stage!
Te lo dico perche secondo me se fai subito questa prova risolvi l'inghippo, te che sei capace.
Io ho provato a cambiare il soggetto dell event listener, mettendoci lo stage o il filmato, ma niente da fare.
Il livello dove c'è il pulsante trasparente è "area pulsante".
 
Evvai, forse adesso funziona. Grazie!
Ho potuto togliere il pulsante che verrà gestito direttamente da DIV e cosi funziona perfettamente, o quasi :)
Infatti vorrei chiederti una cosa: perche il MOUSE_OUT lo sente solamente quando esco dall'area attiva ma rimanendo dentro allo stage? Se esco dallo stage il MOUSE_OUT non fa.
 
Ottimo, sono riuscito a risolvere anche il prblema del pulsante spostandolo dalla root e inserendolo all'interno dell MC che contine la maschera.
E ho visto che pubblicato su web funziona il MOUSE_OUT su tutta la pagina. Grande!! Grazie!

Ma se faccio qualche domanda per capire meglio questo pacchetto di codice che hai scritto, mi rispondi? Magari serve anche ad altri per capire meglio.
 
Allora ti spiego cosa ho fatto, non uppo il file perchè è troppo grosso ma dovrebbe essere sufficiente la spiegazione:
-Ho creato un pulsante trasparente e l'ho messo nell'angolino in basso a sinistra e ci ho associato l'evento di mouse over e mouse out
-Ho toloto ovviamente lo stesso evento da "mc" il codice è cosi adesso:

Codice:
btnT.addEventListener(MouseEvent.MOUSE_OVER,AudioGiu);
btnT.addEventListener(MouseEvent.MOUSE_OUT,AudioSu);
dove btnT è il nome d'istanza del bottone trasparente
-Ora ho creato una variabile booleana che ho chiamato "primoPassaggio" e le ho assegnato il valore false.
-Dentro le funzioni AudioGiu e AudioSu invece la faccio passare a true

Codice:
var primoPassaggio:Boolean=false;
btnT.addEventListener(MouseEvent.MOUSE_OVER,AudioGiu);
btnT.addEventListener(MouseEvent.MOUSE_OUT,AudioSu);
addEventListener(Event.ENTER_FRAME,EnterFrame);

function AudioGiu(me:MouseEvent) {
	primoPassaggio=true;
	alza=false;
}

function AudioSu(me:MouseEvent) {
	primoPassaggio=true;
	alza=true;
}

-Ora dentro l'enterframe controllo se "primoPassaggio" è vera o falsa. Se è vera alzo o abbasso il volume se è falsa non faccio niente.

Codice:
function EnterFrame(e:Event) {
	
	if(primoPassaggio)
	{
		if(alza) {
			if(mc.filmato.volume<1)
				mc.filmato.volume+=0.01;
		}
		else {
			if(mc.filmato.volume>0)
				mc.filmato.volume-=0.01;
		}
	}
}
Perchè questo?Perchè la variabile alza l'ho impostata subito a false quindi il volume si abbassa automaticamente quando parte il filmato, cosa che non deve accadere.
Ho usato poi un bottone trasparente perché secondo me flash si confonde un'po con tutti sti livelli e maschere quindi meglio associare il controllo ad un elemento che sta al livello più alto senza maschere o altri elementi che gli stiano sopra.
Almeno io tendo ad usare spesso i bottoni trasparenti vengono molto comodi...spero di essere stato utile

EDIT: Ho letto solo ora il tuo ultimo post LOL, ci ho messo mezz'ora a scrivere quest'ultima risposta :D
EDIT2: Chiedi pure...ovviamente conosci gia i miei tempi di risposta :D :D
 
Quello che hai fatto a grandi linee lo avevo capito, pero poi mi perdo nelle variabili. Allora:
1) Se primoPassaggio è true sia con OUT che con OVER, allora è true sempre, o no?! e se è true sempre perche viene inizializzata come false? In poche parole mi pare una contraddizione.
2) Hai creato due variabili per far si che il volume sia attivo in partenza?

!!! aspetta aspetta aspetta, forse ci sono: hai inizializzato primoPassaggio come false perche quando è false, alza sta ferma (IF(alza)) e non cala il volume.
E quindi il MOUSE_OUT non significa "essere fuori dall'area determinata" ma USCIRNE, e quindi non si attiva fin che prima non ci entro, giusto?
Ti prego dimmi che è cosi !!
3) Ma non hai invertito i valori delle funzioni!?!

Dettagli:
1d) IF (primoPassaggio) sta per IF (primoPassaggio == true) ?
2d) nel codice che hai postato manca forse 'var alza:Boolean=false ?
3d) primoPassaggio non fa niente se è false perche non hai specificato l'ELSE dopo il suo(di primoPassaggio) IF ?

Sembra d'essere a una ripetizione privata !
Giusta l'idea di fare un pulsante sulla root, io invece ho risolto inserendolo dentro mc. Nella mia stuoidità non avevo pensato che l'evt OVER e OUT li potevo anch'essi associare al pulsante insieme alla funzione navigateToURL, cosi non si davano noia appunto con mc. Molto piu lineare e pulito il tuo FLA, bravo!!

Come vedi ho messo i numeri alle domande cosi ci perdi meno tempo, forse.
 
Forse si poteva fare in un'altro modo o meglio si poteva fare sicuramente in un'altro modo, ma l'ho buttato li al volo e noto solo ora che si poteva ottimizzare, ma lasciamo stare se no facciamo ancora più confusione.
primoPassaggio lo metto a false e poi lo metto true e rimane cosi per sempre cosi quando avvi l'swf la prima volta il volume non si abbassa in automatico visto che alza è a false e nell'enterFrame se alza è a false il volume si abbassa.
-Hai ragione MOUSE_OUT significa proprio "uscire dall'area interessata" come MOUSE_OVER significa "entrare nell'area interessata".
-Forse ho invertito i valori delle funzioni, paciugandoci dentro...
-if(primoPassaggio) è identico a if(primoPassaggio==true) è sempre cosi per le variabili booleane, se vuoi fare if(primoPassaggio==false) puoi scrivere if(!primoPassaggio)
-Esatto se primoPassaggio è true allora fa quello che deve fare se è false non succede niente.

Scusami ma sono molto confusionario quindi se hai altri dubbi chiedi pure
 
Rieccomi:
Quindi se consideriamo che io voglio che il volume parta a zero, posso utilizzare una sola variabile ?
Perlomeno io ho fatto cosi e tutto funziona bene. Praticamente ho usato la tua prima versione del codice...
Però mi chiedo una cosa: il volume parte da zero realmente o si abbassa al caricamento della pagina per cui io non lo sento, ma in effetti parte da uno e scende a zero?
Se considero che MUOSEOUT è uscire dal pulsante, direi che parte da zero. Perche io al caricamento della pagina non faccio l'azione di uscire dal pulsante.
Ma nel codice cosa è che gli dice di partire da zero?

Dettaglio:
(me:MouseEvent) ME sta per mouse.event?
 
Pubblicità
Pubblicità
Indietro
Top