- Home
- Categorie
- Digital Marketing
- Grafica, Visual Design & UX
- Rilevare il passaggio del mouse su un clip filmato "duplicato"
-
Ciao,
direi che ti servira aggiungere tutti questi clip duplicati in un array (con un 'push' - non so se usi un ciclo for o no per duplicare:bho:).
Poi da la, si potrebbe aggiungere azione onRollover/Rollout con un ciclo for della lunghezza del array che richiama una funzione 'generale' per tutti i clip.Un esempio proprio di base:
clip_rollOver = function () { //azione }; clip_rollOut = function () { //azione }; for (i=0; i<clip_array.length; i++) { clip_array*.onRollOut = clip_rollOut; clip_array*.onRollOver = clip_rollOut; }
-
Ciao Onsitus! come sempre precisa e puntuale
Allora per risponderti, sì utilizzo un ciclo for per la duplicazione delle clip filmato.for(var i:Number = 1; i < 5; i++) { var asseX:Number = i * (clip._height + spazio);; clip._alpha = 60; clip.duplicateMovieClip("clip"+i, i, {_y:245,_x:asseX}); loadMovie("thumbnails/image"+i+".jpg", "clip"+i+".foto"); } ```questo è il frammento di codice che mi duplica il mio clip filmato "clip" per n° 5 volte, nel loadMovie esiste "clip"+i+".foto", perché la foto jpg viene caricata all'interno di un clip figlio "foto". Ho usato gli array per dichiarare variabili ma mai per "indicizzare" il nome di un clip filmato :bho: non capisco come funziona la cosa (programmo ed uso flash perché utilizzo diversi linguaggi di programmazione molto simili a AS ma se non le ho mai utilizzate ho difficoltà con espressioni o sintassi tipiche del linguaggio :cry:) come ho ottenuto la copia è sopra ,ora un piccolissimo esempio di come richiamare una istanza all'interno di un' altro ciclo per esempio per attribuire DOPO un attributo come "clip(x)._x -= 10;" o almeno una buona guida dove posso apprendere il sistema in AC GRAZIE :kiss:
-
Il mio problema è che per utilizzare una struttura di array come nell'esempio ```
clip*.onRollOut = clip_rollOut;
clip*.onRollOver = clip_rollOver;devo prima assegnare ad ogni singolo elemento dell'array il nome dell'istanza precedentemente creata con duplicateMovieClip, esempio clip[1] = clip1; clip[2] = clip2; etc.. per assegnare direttamente all'array l'istanza del clip duplicato ho provato sensa successo così:
clip.duplicateMovieClip(clip*, i, {_y:245,_x:asseX});
clip.duplicateMovieClip("clip["+i+"]", i, {_y:245,_x:asseX});:x come cavolo devo assegnare il clip filmato duplicato ad un array ? non funziona un'assegnazione neanche di questo tipo: clip* = "clip"+i; :cry:
-
Prima del ciclo for, c'è da dichiarare l'array:
var clip_array:Array = new Array();
Poi dentro il for, dopo il duplicate, usa il push:
clip_array.push("clip"+i);
Se a quel momento fai un trace(clip_array); ti ritorna tutte le istanze create e sono anche disponibile da usare al di fuori del ciclo.E quella parte che non aveva capito???:bho:
-
Onsitus, no!
vediamo se riesco a spiegarmi meglio (è difficile in quanto confuso anche io :?)
Con il metodo push, assegno in automatico ad ogni elemento dell'array il valore corrente, cioè se faccio un trace (clip_array) ottengo ad ogni ciclo iterazione del ciclo For:
clip1
clip1, clip2
clip1, clip2, clip3
etc..
se faccio un bel trace di trace(clip_array[2]) ottengo un bel clip1 cioè il valore caricato nella seconda cella dell'array (come è giusto che sia!)
Ma questo funzionava anche prima senza il comodo metodo push.
Il mio problema non è memorizzare in ogni cella dell'array il nome dell'istanza del clip filmato, ma utilizzarla.
Esempio: se voglio applicare la proprietà _xscale all'istanza con il nome clip3, faccio: clip3._xscale = 100; e funziona, ma se faccio clip_array[2]._xscale = 100; NON funziona anche se un trace su clip_array[2] mi restituisce correttamente "clip3", al contrario se assegno direttamente clip_array[2] = clip3; allora clip_array[2]._xscale = 100; FUNZIONA!Spero di essere stato più chiaro possibile :bho: non fosse per altro che per gli esempi con i pezzettini di codice...
NOTTE
-
@teradm said:
Ciao!
Il problema e che non so a priori quanti clip sono stati duplicati e vorrei ottenere un codice senza dover entrare in tanti cicli di controllo quanti clip massimo posso duplicare, qualcosa come ```
"clip"+i.onRollOver = function () { etc..Lasciando a perdere l'array per il momento...stavo rileggendo il tuo primo post.
Riguardo quello scritto sopra, provato con:this["clip"+i].onRollOver=function(){ trace("over"); } ```Sempre nel ciclo for.:bho:
-
Onsitus SMACH!!!!!!!!!!
Ora ci siamo!
for(var i:Number = 0; i < nClip; i++) { this["clip"+i].onRollOut = dia_rollOut; this["clip"+i].onRollOver = dia_rollOver; };
Va a meraviglia! finalmente il nome contenuto nella variabile (o nell'array in caso di array) viene considerato come il nome di istanza di un clip filmato!!! e quindi è possibile assegnare ad esso qualunque proprietà od operazione.
Davvero tante grazie, sono sicuro che in seguito mi tornerà utile per tanti altri filmati.
CIAO!
-
Mi fa piacere sapere che funziona. Ci ho messo un po per capire.:D
-
Onsitus, intanto complimenti, ho dato un'occhiata al tuo sito e di conseguenza ai tuoi lavori, veramente molto brava e professionale.
Ma ritorno OT ;).
Come ti dicevo utilizzando
this["clip"+i]._proprietà o altro....
AC utilizza il testo clip+i come reale nome di un clip filmato, e quindi ad esso posso associare tutte le proprietà o metodi che voglio... (e fin qua ci siamo...) ma specificando "this" ho il problema che, se ad esempio, entro in una funzione generata da un oggetto, all'interno di questa funzione non posso utilizzare il metodo "this" per eseguire una operazione su un oggetto diverso... esempio:dia_rollOver = function () { this.swapDepths(diapositiva4); this.gotoAndPlay(2); etc.. etc.. var i:Numeber = 5; //solo per fare un esempio this["riflesso"+i]._xscale = 12; }; this["clip"+i].onRollOut = dia_rollOut; ```uso l'evento onRollOut sul clip filmato clip+i (esempio clip3) entro nella funzione dia_rollOut, eseguo una serie di operazioni sullo stesso clip utilizzando "this", ma quando devo specificare un altro clip filmato senza specificarlo direttamente come ad esempio riflesso3._xscale = 12; ma come accadeva prima this["riflesso"+i] etc.. non funziona, e direi giustamente perché il metodo this fa riferimento all'oggetto che ha generato l'evendo per il quale sono entrato nella funzione... allora in questo caso come devo specificare il nuovo clip ? :? In pratica è lo stesso problema di prima ma non funzionante lì dove non può essere utilizzato il metodo this... Sono sicuro che se hai capito bene la mia domanda grazie alla tua professionalità saprai rispondermi facilmente. Ciao :ciauz:
-
Se i clip filmati 'riflesso' si trovano sulla linea temporale principale:
dia_rollOver = function () {
var i:Number=5;
_root["riflesso"+i]._xscale=12;
}
-
Onsitus come al solito ci hai preso :), ed ho anche capito che il problema stava non nel tipo di dichiarazione dell'oggetto clip ma dal suo percorso path dell'oggetto a cui si fa riferimento!
GRAZIE ! di nuovo e Buon S.Valentino
-
Prego e grazie.:)