• User

    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:

  • Super User

    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:


  • User

    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


  • Super User

    @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:

  • User

    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!:wink3:


  • Super User

    Mi fa piacere sapere che funziona. Ci ho messo un po per capire.:D


  • User

    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:

  • Super User

    Se i clip filmati 'riflesso' si trovano sulla linea temporale principale:
    dia_rollOver = function () {
    var i:Number=5;
    _root["riflesso"+i]._xscale=12;
    }

    :mmm:


  • User

    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 💋


  • Super User

    Prego e grazie.:)