Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    onClipEvent(enterframe) vs this.onEnterFrame

    Salve, vi sottopongo una questione teorica su cui vorrei un chiarimento.

    Dunque, ho n movieclip che si devono muovere per creare un menu a tendina come quello di flash-mx mostrando dei sottomenu.

    Ho letto l'articolo di Negatyve sul menù di flash-mx, appunto.
    La mia domanda è:
    in termini di cpu, cambia qualcosa se il movimento è gestito da un onClipEvent(enterframe) associato ad ogni mc oppure da un unico ciclo for che richiama per ogni MovieClip una funzione prototype con this.onEnterFrame ?

    Chiedo questo perché nel mio caso non riesco poi con il ciclo for e la prototype a cancellare onEnterFrame una volta eseguito il movimento, ma, mi chiedo, anche onClipEvent(enterframe) è un ciclo sempre attivo o no?
    Non so se mi sono spiegato.

    Grazie in anticipo a chi vorrà chiarirmi questo aspetto.

  2. #2
    Il ciclo for PIU' this.onEnterFrame non ha senso, perchè già onEnterFrame è un'azione che viene ripetuta.
    Inoltre, il ciclor for mostra a livello visivo solo il risultato finale, quindi non è adatto ad esempio per un movimento (come invece è adatto l'enterFrame perchè mostra i diversi passaggi).

    La differenza principale è che una cosa tipo

    mc.onEnterFrame = function(){....}

    è poi cancellabile quando non più necessario con

    delete mc.onEnterFrame

    Mentre l'onClipEvent(enterFrame) non risulta cancellabile (a meno che non rimuovi ad esempio il movieclip che lo contiene, ma può essere scomoda come soluzione).

    Direi quindi che se si tratta di un menu (quindi suppongo i movimenti debbano essere visti man mano che vengono eseguiti) ti conviene scartare il ciclo for

  3. #3
    Mah... io col ciclo for + enterframe non faccio altro che assegnare l'enterframe a tutti i vari n elementi del menu, e riesco tranquillamente ad ottenere l'effetto che volevo.
    Ho provato ad usare questa soluzione proprio per poter cancellare l'enter frame una volta che il menù è nella posizione desiderata, cosa che al momento non mi riesce...

    Questo è il codice che ho utilizzato:
    codice:
    // funzione spostamento
    MovieClip.prototype.sposta=function(i, quanto) {
       this.onEnterFrame=function() {
    	w=this._y;
    	t=eval("p"+(i-1))._y;
    
            //ogni elemento si muove seguendo il superiore + eventuale spazio apertura
    	fine=t+24+quanto; 
    	this._y=((fine-w)/5)+w;
    	if(Math.abs(this._y-fine)<=.5) {this._y=fine;
            // delete this.onEnterFrame; non funziona
            } 
    	}
    }
    
    // funzione richiamata alla pressione di un elemento
    function muovi(quale, quanto) {
            // estrapolo il nome dell'elemento: p1->1 p2->2...
    	questo=new String(quale);
    	questo=parseInt(questo.substr(1,2));
    	
            //lancio il ciclo per i movimenti
    	for(i=2;i<=_root.menu_tot;i++) {
    	if(i==(questo+1)) {eval("p"+i).sposta(i, quanto);}
    	else {eval("p"+i).sposta(i, 0);}
    	}
    }
    Ho provato ad usare questo sistema proprio per poter interrompere gli enterframe (cosa non possibile con i onClipEvent(Enterframe)) e, ripeto, funziona esattamente come se usassi degli onClipEvent però:
    1. non riesco ugualmente a stoppare onEnterFrame;
    2. ho il sospetto che così la cpu sia più impegnata...

    :master:

  4. #4
    Ah okay il for per assegnare i vari enterFrame sì va benissimo, avevo capito male io

    il delete this.onEnterFrame deve funzionare, forse è la condizione if che non si verifica, per sicurezza oltre al delete mettici tipo un trace("K") per vedere appunto se non viene eseguito proprio quel "blocco" di azioni o se è l'onEnterFrame a non funzionare.
    Che la cpu sia più impegnata mi pare abbastanza strano visto che a livello di operazioni eseguite sono equivalenti

  5. #5
    Innanzi tutto grazie Broly

    Originariamente inviato da Broly
    il delete this.onEnterFrame deve funzionare, forse è la condizione if che non si verifica, per sicurezza oltre al delete mettici tipo un trace("K") per vedere appunto se non viene eseguito proprio quel "blocco" di azioni o se è l'onEnterFrame a non funzionare.
    No no la condizione si verifica e il delete funziona, però blocca tutto, facendo muovere ad ogni click un solo pulsante invece che tutti insieme.
    Io credevo che avendo usato la prototype movimento e controllo funzionassero sull'enterframe di ogni singolo elemento, ma evidentemente qualcosa non va...


    Che la cpu sia più impegnata mi pare abbastanza strano visto che a livello di operazioni eseguite sono equivalenti
    Che il tipo di operazione è equivalente già mi risolve un dubbio!

  6. #6
    prova con

    trace(Math.abs(this._y-fine))

    e verifica quando e se si completa il controllo <=0.5

    Ciao

  7. #7
    Grazie Rempox, ma la condizione è verificata, infatti se aggiungo il delete l'apertura del menu va a scatti e ogni trace si ferma:
    il punto è che ogni elemento durante l'enterframe si posiziona in relazione alla ._y dell'elemento superiore; evidentemente bloccando l'enterframe questo 'sistema di relazioni' non si completa: clikkando più volte l'elemento ad ogni click gli altri elementi si vanno a collocare dove dovrebbero.
    Invece senza il delete tutto funziona con un unico click...

    :master:

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.