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

    Imprecisione di actionscript?!?

    Ciao a tutti, ho costruito cercando aiuto in questo forum una barra che avanza con il tempo (la nostra variabile "tempo"). Ho integrato il file della barra un una pagina web dove c'è anche un countdown di tempo (fatto in java). Impostando un certo tempo e assistendo all'avanzamento della barra ho notato che il tempo e la barra non corrispondono! La barra arriva sempre in ritardo!
    La mia domanda: come si può aggiustare lo script (qui sotto)?
    È possibile che flash sia troppo lento (quindi ci mette tempo a calcolare la funzione) e di conseguenza il tutto diventa impreciso?
    codice:
    stop();
    barra._xscale = 0;
    a = setInterval(function(){
    			if(barra._xscale < 100){
    				barra._xscale++;
    			} else {
    				clearInterval(a);
    				nextScene();
    			}
    		}, (tempo*10));
    HELP!!!

  2. #2
    l'incremento percentuale della barra difficilmente corrisponderà ai secondi del countdown esterno che genera il tempo.
    Potrebbe essere influenzato dal framerate basso??


  3. #3
    Utente di HTML.it L'avatar di nep036
    Registrato dal
    Nov 2003
    Messaggi
    1,453
    bisogna vedere la var tempo a quanto è uguale...

    tempo*10 cosa da?

    se fai un interval con valore 1000 dovrebbe scandire i secondi in maniera molto precisa....

  4. #4
    uhm provo ad aumentare la frame rate...
    cmq ho messo tempo*10 invece di fare (tempo*1000)/100
    (---> la formula me l'ha data qualcuno qui nel forum)
    grazie comunque

  5. #5
    Graazie molte funziona bene aumentando la framerate!!! Era così semplice :S
    GRAZIE!

  6. #6
    ciao,

    se posso dire la mia, setInterval non viene eseguito precisamente ogni durata richiesta, ma:
    durata_richiesta + tempo_esecuzione_function_di_callback.

    Cioe', se p.e. ho una function che prende circa 50 msec per essere eseguita e la chiamo con un intervallo di 1000 msec. avremo una scansione di 1050 msec.

    Per ottenere una misurazione ragionevolmente precisa (non piu' approssimata al msec in ogni caso), bisognerebbe misurare il tempo d'esecuzione della function di callback e sottrarlo al tempo richiesto.
    Occorre farlo ogni volta perche' come sapete in flash l'esecuzione delle istruzioni avviene in modo seriale, ed e' anche guidato dagli eventi, percio' non e' dato sapere con esattezza quanto tempo e' necessario per eseguire uno statement.

    C'e' anche da dire che con setInterval la function di callback "parte" DOPO il tempo richiesto, non subito.

    Se vi va di fare questa prova:

    codice:
    var intervalID:Number;
    
    var sec:Number = 1000;
    var timeTracker:Object = {};
    timeTracker.oldTime = 0;
    timeTracker.currentTime = 0;
    timeTracker.pollings = [];
    timeTracker.testTimes = 10;
    
    
    function show_time_spent():Void{
    
    	var currentTime = getTimer();
    
    	trace("tic tac");
    	
    	timeTracker.pollings.push(currentTime - timeTracker.oldTime);
    	timeTracker.oldTime = currentTime;
    	
    	if(--timeTracker.testTimes == 0){
    
    		trace("test duration: " +(currentTime - timeTracker.firstTime));
    		
    		var pCount = timeTracker.pollings.length;
    		for(var i:Number = 0; i < pCount; i++) trace(i + ": " +timeTracker.pollings[i]);
    		clearInterval(intervalID);
    	}
    }
    
    
    timeTracker.firstTime = getTimer();
    intervalID = setInterval(show_time_spent, sec);
    in teoria dovremmo avere una misurazione precisa di 10 secondi, cosa che non avviene (a 12fps c'e' circa mezzo secondo di scarto).
    Si vede che ogni istruzione porta via tempi leggermente diversi, sempre superiori al tempo richiesto, alzando il framerate i tempi tendono a migliorare per via della maggiore velocita' di esecuzione.

    In sostanza l'idea di dare lo start ad una misurazione di tempo e aspettarsi che sia sincronizzata e' da scartare a priori se non vanno prese misure particolari.
    Puo' andar bene se i tempi di misurazione sono brevi e portano a scostamenti accettabili, imho e' cmq una soluzione discutibile.



    Jaco

  7. #7
    Ciao,

    grazie Jaco della tua precisissima spiegazione!
    In ogni caso io avevo intenzione di usare la mia barra con intervalli di tempo anche di molte ore... ho alzato la framerate e sembra funzionare... ora faccio un test con un tempo di 2-3 ore per vedere il risultato!
    Grazie comunque della spiegazione!

  8. #8

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.