Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1

    setInterval - pregi e difetti

    PREGI:
    • utilizza meno risorse di onEnterFrame
    • solitamente e' scritto in modo piu' portabile rispetto onEnterFrame
    • e' piu' preciso e difficilmente sfasa i tempi "calcolati"


    DIFETTI:
    • va controllato scrupolosamente e non puo' essere "dimenticato"
    • se usato con loadMovie e il movie caricato ha un setInterval, bisogna ricordarsi di rimuoverlo ad ogni nuovo loadMovie o su ogni unloadMovie effettuato sullo stesso mc che carica



    prendete un file di nome movie.fla

    istanziate 2 movieClip, uno che fara' da bottone e un altro che fara' da loader ...

    il primo con nome istanza loader_btn e il caricante con nome istanza loader_mc

    ora create un file movie1.fla , scrive al suo interno , sul keyframe, semplicemente questo:

    codice:
    function tracer() {
    	trace( 'intervallo' );
    }
    this.__interval = setInterval( this, 'tracer', 1000 );
    esportate l' swf movie1.swf ... tornate al movie.fla ...

    scrivete semplicemente questo:
    codice:
    loader_btn.onPress = function() {
    	if( !this.__loaded ) {
    		loader_mc.loadMovie( 'movie1.swf' );
    	}
    	else {
    		loader_mc.unloadMovie();
    	}
    	this.__loaded = !this.__loaded;
    }
    se clickate il bottone ... carica il movie1.swf , poi ad ogni secondo vedrete un trace ... se riclickate il bottone scarica movie1.swf e l' interval smette ...


    ma cosa succede se riclickate per ricare ???

    il player, o meglio il movie caricante, si ricorda dello scorso intervallo, ne crea un altro ... e la funzione verra' richiamata 2 volte ... scaricate e ricaricate ... 3 volte .... etc etc ...


    Questo 3D vuole solo essere di aiuto per chi si danna con azioni "scattanti" o carichi di CPU incrementali, nonostante abbia optato per un setInterval, dentro le proprie sezioni esterne, piuttosto che un onEnterFrame ... in pratica e' solo una delucidazione in merito sul:
    perche' carico movie esterni ed uso setInterval ma dopo un po' che navigo il sito scatta ???

    ecco il perche', se invece usate loadMovieNum, questo non accade.

    Solo un approfondimento, spero sia utile a qualcuno
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  2. #2
    io solitamente ammazzo l'intervallo precedente
    alla pressione del bottone, secondo te va bene??

    cioe' se il mio pulsante crea 1 pippo=setInterval(....

    come prima azione del on(press) ci metto clearInterval(pippo).

    ha controindicazioni???
    NO'rte project
    www.norte.it

  3. #3
    Originariamente inviato da norte
    ha controindicazioni???
    non ne ha solo se utilizzi lo stesso nome per l' intervallo ... io ad esempio uso sempre __interval quindi questo

    codice:
    loader_btn.onPress = function() {
    	if( !this.__loaded ) {
    		loader_mc.loadMovie( 'movie1.swf' );
    	}
    	else {
    		clearInterval( loader_mc.__interval );
    		loader_mc.unloadMovie();
    	}
    	this.__loaded = !this.__loaded;
    }
    va sempre bene, ma attenzione, cosi' facendo si rimuove solo l' ipotetico intervallo alla root del movie caricato,se questo dovesse averne altri al suo interno, per ogni unloadMovie dovrei fermare tutti gli intervalli che sono annidati, altrimenti rischiano di rimanere persistenti .... e il rischio maggiore, oltre quello di ritrovarsi le funzioni duplicate, triplicate, etc etc ... e' quello di ritrovarsi un intervallo portato sul nuovo file diverso da movie1.swf ... e se questo ha dei campi con gli stessi nomi di istanza di movie1.swf, l' intervallo fa il suo compito, ergo non sparisce.

    Insomma, controllare sempre gli intervalli, l' ideale sarebbe usare una funzione tipo:

    __clearAllIntervals();

    da richiamare prima di ogni unloadMovie ... quella funzione eliminera' tutti gli intervalli interni e/o annidati utilizzati dalla sezione o da quel movie e validi per quel solo movie
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  4. #4
    gentile mod

    piu' che guida, scriverei PILLOLINA o meglio ancora [APPROFONDIMENTO]
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  5. #5
    Utente bannato
    Registrato dal
    Sep 2001
    Messaggi
    1,064
    Spero solo che poi non diventi un casino.

    Metto Pillola, credo sia più comune come parola da ricercare.

  6. #6
    Comunque non è precisissimo manco lui...se uno dovesse fare un'applicaziona realmente "precisa" come tempi in Flash credo che farebbe prima a spararsi

  7. #7
    Originariamente inviato da Broly
    Comunque non è precisissimo manco lui...se uno dovesse fare un'applicaziona realmente "precisa" come tempi in Flash credo che farebbe prima a spararsi
    non ho detto che e' perfetto, ho detto che e' piu' preciso e che i tempi vengono rispettati ... sicuramente meglio di onEnterFrame .. anche JS non e' preciso, mi sa che pochi sono precisi
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  8. #8
    Originariamente inviato da andr3a
    non ho detto che e' perfetto, ho detto che e' piu' preciso e che i tempi vengono rispettati ... sicuramente meglio di onEnterFrame .. anche JS non e' preciso, mi sa che pochi sono precisi
    Mica ho scritto che hai detto una cazzata , ho scritto solo che manco lui è preciso al 100% , chiaro che in un'applicazione "media" se invece che un secondo passa un secondo e 2 decimi non ce ne frega 'na cippa

  9. #9
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    anch'io ho iniziato ad usare setInterval per le mie funzioni e devo dire che lo trovo decisamente più controllabile ripsetto ad un enterFrame, c'è una solo cosa che non so se è fattibile, è quella di nidificare dei setInterval in questa maniera
    codice:
    azioni1 = function(){
    	//azioni che voglio
    	if (//azioni che voglio è arrivato al limite stabilito){
    		clearInterval(ID1);
    		
    	}
    }
    azioni2 = function(){
    	//azioni che voglio
    	if (//azioni che voglio è arrivato al limite stabilito){
    		clearInterval(ID2);
    		ID1= setInterval(azioni1, 50);
    		
    	}
    }
    ID2 = setInterval(azioni2, 500);
    o se invece convenga usare lo stesso ID tipo
    codice:
    azioni1 = function(){
    	//azioni che voglio
    	if (//azioni che voglio è arrivato al limite stabilito){
    		clearInterval(ID);
    		
    	}
    }
    azioni2 = function(){
    	//azioni che voglio
    	if (//azioni che voglio è arrivato al limite stabilito){
    		ID= setInterval(azioni1, 50);
    		
    	}
    }
    ID = setInterval(azioni2, 500);
    entrambi comunque con tempi diversi

  10. #10
    quale conviene sei tu a stabilirlo ... se l' ID di fatto non ti serve a niente tranne che per fermare degli intervalli che non saranno mai accavallati, nel senso o uno o l'altro, a prescindere da chi pirma e chi poi ... allora usi una sola variabile, piu' facile da controllare.

    Se invece devi fare intervalli incrociati o simultanei o devi controllare quale tipo di id sta' funzionando in quel momento, allora usi nomi differenti .


    Altro consiglio, per semplificarsi la vita sui controlli, oltre al clearInterval( VARIABILE ), setta la VARIABILE a 0 ... cosi' su eventuali checks farai




    if( VARIABILE == undefined || VARIABILE == 0 ) {
    // nessun intervallo, altrimenti quello su VARIAIBLE e' attivo
    }
    else {
    clearInterval( VARIABILE );
    VARIABILE = 0;
    }
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

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.