Visualizzazione dei risultati da 1 a 10 su 10

Discussione: array e funzioni

  1. #1

    array e funzioni

    salve a tutti e bentornati dalle ferie.
    la mia domanda è questa come mai, dopo aver creato un array di riferimenti a MC, quando vado ad impostare delle funzioni di callback (esempio queste sotto) mi funziona solo sull'ultimo MC dell'array?
    ----------------------------------------
    function trascina(cosa){
    cosa.startDrag(false);
    }
    arrPan = new Array();
    for (i in _root.pannelli) {
    arrPan.push(pannelli[i]);
    }
    for (k in arrPan) {
    arrPan[k].topBar.onMouseDown = function() {
    if (this.hitTest(_root._xmouse, _root._ymouse, true)) {
    _root.trascina(arrPan[k]);
    }
    };
    }
    -------------------------------------------
    grazie 1000

  2. #2
    Perchè tu in quel modo associ al movieclip questo

    if (this.hitTest(_root._xmouse, _root._ymouse, true)) {
    _root.trascina(arrPan[k]);
    }

    In tal modo, lui passa alla funzione 'trascina' il nome corrispondente all'indice 'k' di arrPan, e 'k' chiaramente ha come valore quello che le è rimasto alla fine del ciclo.

    Cambia in

    if (this.hitTest(_root._xmouse, _root._ymouse, true)) {
    _root.trascina(this)
    }

    In questo modo passerai il nome dei diversi movieclip, e non sempre l'ultimo.

    Fammi sapere, ciao

  3. #3
    vado a provare, domanda:
    ma avendo scritto :

    arrPan[k].topBar.onMouseDown = function() {
    ......
    };


    non ho associato una funzione di trascinamento ad ogni MC referenziato nell'array arrPan?

  4. #4
    No, tu hai associato sì la funzione a tutti i movieclip, ma il parametro che passi a tale funzione è sempre il nome dell'ultimo movieclip.

    Inoltre, un consiglio: invece di usare onMouseDown e hitTest, usare direttamente onPress (o onRelease)

  5. #5
    infatti ora funziona
    grazie 1000

  6. #6
    Hai capito qual era il problema? Perchè forse non mi sono spiegato bene
    Se non hai capito provo a spiegartelo meglio

  7. #7
    credo di si, entro un call back devo riferirmi al MC cui il callback è associato con this e non con un riferimento al clip

    esatto?

  8. #8
    Beh non era il this o la mancanza del this il punto 'base', era che tu passavi come parametro alla funzione una variabile e non il nome del clip

    Solo che tu associavi al movieclip

    if (this.hitTest(_root._xmouse, _root._ymouse, true)) {
    _root.trascina(arrPan[k]);
    }

    Tu probabilmente pensavi, erroneamente, che scrivendo così il parametro sarebbe stato il nome del clip, quindi che l'azione 'compilata' sarebbe stata come

    if (this.hitTest(_root._xmouse, _root._ymouse, true)) {
    _root.trascina(nomediquestoclip);
    }

    Visto che arrPan[k] era il nome di quel clip.

    Invece no: così dici a Flash "esegui la funzione trascina e passale come parametro l'indice K di arrPan"

    Ora, l'indice k è il valore della variabile k...ma qual è il valore di k? Quello che aveva alla fine del ciclo for...in
    Per cui quello più alto -> quindi praticamente il valore arrPan[k] corrispondeva all'ultimo movieclip a cui avevi assegnato l'azione...ecco perchè, anche se clickavi sul primo, l'azione veniva eseguita dall'ultimo.

    Mettendo invece this, hai fatto in modo che il clip cliccato passasse come parametro il suo nome, quindi funziona correttamente.

    Spero che la spiegazione si abbastanza comprensibile

  9. #9
    spiegazione perfetta, grazie

  10. #10
    Prego, alla prossima

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.