Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di c3k
    Registrato dal
    Jan 2002
    Messaggi
    42

    [un po' di teoria] onClipEvent e localizzazione variabili e funzioni

    sto cercando di chiarimrmi le idee una volta per tutte...

    mi sono letto le varie documentazioni di onClipEvent, this, function e function.call ma ancora ho qualche dubbio e la speranza è trovare qui qualcuno che mi illumini con un po' della sua conoscenza

    la cosa che nn mi torna è questa:

    definisco una funzione nella root:
    codice:
    function foo(){
    	trace(this)
    	d = 20;
    }
    - se la chiamo da root il risultato è ovvio: "_level0" con d creata nella root

    - se creo un mc e gli assegno:
    codice:
    onClipEvent (load) {
    	_root.foo();
    }
    il risultato è lo stesso e ok...

    - se invece assegno da root:
    codice:
    mymc.onLoad = foo;
    il trace mi dice "_level0.mymc" e io, ingenuo, mi aspetto che la variabile d sia in _level0.mymc invece è in root:

    perchè?

    mi chiedo:
    che differenza c'è tra usare OnClipEvent oppure assegnare direttamente al gestore di evento una funzione?

    l'errore che commettevo era pensare che scrivere:
    codice:
    mymc.onLoad = foo;
    fosse uguale a scrivere in mymc:
    codice:
    onClipEvent (load) {
    	trace(this)
    	d = 20;
    }
    posso ottenere lo stesso risultato senza riempire il mio codice di this?

    forse ho solo bisogno di chiarirmi cosa accade quando faccio un assegnazione del genere nuovafunzione = funzione...

    avete qualche buon testo di cui consigliarmi la lettura?

    grazie per la pazienza e scusate per la marea di domande

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2004
    Messaggi
    641
    prova così dalla _root

    _root.mymc.onLoad = function(){
    foo();
    trace(this + " d: " + d)
    }


  3. #3
    Utente di HTML.it L'avatar di c3k
    Registrato dal
    Jan 2002
    Messaggi
    42
    2 problemi nella tua soluzione:

    se chiamo foo() non trovo nulla giustamente
    chiamando _root.foo() il problema rimane lo stesso di prima (d è creato nella root)

    comunque più che di una soluzione (che comunque ho usando this) avrei bisogno di una spiegazione

    grazie lo stesso per l'attenzione

  4. #4
    Utente di HTML.it L'avatar di c3k
    Registrato dal
    Jan 2002
    Messaggi
    42
    up

  5. #5
    Per quello che cerchi ti conviene imho usare una prototype, in modo che tu possa richiamarla da ogni movieclip senza complicarti le cose coi percorsi.
    Ad esempio

    MovieClip.prototype.foo = function(){
    trace(this)
    this.d = 20
    }

    ora, tu puoi fare

    mc.foo()

    E avrai la variabile _level0.mc.d
    Allo stesso modo potrai fare mc2.foo(), altromovieclip.foo() etc, insomma non avrai vincoli di percorsi, in quanto usando la prototype hai assegnato ad ogni movieclip il "metodo" foo.

  6. #6
    Utente di HTML.it L'avatar di c3k
    Registrato dal
    Jan 2002
    Messaggi
    42
    ok, conoscevo il prototype ma l'ho sempre usato molto poco, per evitare di appesantire il filmato

    quindi mi confermi che l'uso del this è inevitabile per ottenere lo scopo?

  7. #7
    Il prototype non appesantisce in maniera rilevante il filmato , per avere una funzione che ti dichiari la variabile nel movieclip da cui la richiami devi per forza usare il this, sì

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 © 2025 vBulletin Solutions, Inc. All rights reserved.