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

    E' possibile inserire codice "asincrono"?

    Correggetemi se sbaglio. Mettiamo che abbia un filmato a 10 fps. Questo significa che ogni frame ha un decimo di secondo per essere eseguito. Se io a un certo punto invoco una funzione, il filmato non andrà al frame successivo finché la funzione non stata eseguita interamente. Ma se il tempo di calcolo richiesto dalla funzione è particolarmente oneroso, si ha che il filmato rallenta.
    E' possibile scrivere una funzione lunga a piacere, che non rallenti il filmato e che permetta lo scorrere corretto dei frames? In altre parole, una funzione che venga eseguita in maniera asincrona rispetto alla velocità dei frames al secondo. Sapete nulla a proposito?

  2. #2
    l' asincrono non e' che sia proprio questo ...

    comunque se fai una funzione che mette sotto sforzo la CPU al punto di rallentare il filmato questa funzione non va bene, oppure non e' ottimizzata, oppure e' concettualmente sbagliata, oppure semplicemente ha bisogno di tante risorse ... e se fosse cosi', pensa solo che qualunque video-gioco che conosci, la dove ci sono "funzioni" o calcoli pesanti, rallenta ... non puoi rendere indipendente l' esecuzione di un codice dedicato e interno all' swf dall' swf stesso ( e vale per qualunque linguaggio / applicativo )
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  3. #3
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    scusate, ma una funzione impostata con setInterval (come ha suggerito spesso andr3a) non dovrebbe rendersi indipendente rispetto al framerate del filmato, e quindi dal filmato stesso?

  4. #4
    Originariamente inviato da and80
    scusate, ma una funzione impostata con setInterval (come ha suggerito spesso andr3a) non dovrebbe rendersi indipendente rispetto al framerate del filmato, e quindi dal filmato stesso?
    si, ma un setInterval su una animazione , per esempio , con un intervallo piu' basso di quelo che e' il framerate del filmato, sforza la CPU allo stesso modo, anzi di piu' , perche' fa calcoli su calcoli ma alla fine vedi i movimenti solo in sincronia col framerate ...
    ( per questo consiglio FPS altissimo, tipo da 60 in su ( anche 120 ) ed un utilizzo massiccio di setInterval per ogni volta che pensate di usare un onEnterFrame )

    ma setInterval o non setInterval, se una funzione impegna la CPU al 100% , ti va a meretrici il filmato
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  5. #5
    No beh nessuno ha parlato di animazioni, la funzione particolarmente onerosa riguarda l'analisi di un albero con opportuni algoritmi di ricerca. Per questo pensavo proprio a utilizzare un setInterval, per non far eseguire troppe istruzioni nello stesso frame, ma "diluire" l'analisi dell'albero su più frames, in maniera da non saturare la CPU e da non rallentare il filmato.
    Ad esempio posso mettere un check che dopo 1000 istruzioni interrompa la funzione, per riprenderla al frame successivo. Questo ha senso, andr3a, secondo te?

  6. #6
    ha senso se la funzione ha uno "stato" o se invece di funzione fai una classe , dove ogni metodo viene "diluito" frame per frame o ogni tot frames ...

    esempio ...


    codice:
    class CalcoloMassiccio {
    	private var __status__:Object;
    	function CalcoloMassiccio() {
    		this.__status__ = new Object();
    	}
    	public function method( what:String ):Void {
    		if( this[what] != undefined ) {
    			this.__status__[what] = this[what]();
    		}
    	}
    	public function getResult():Number {
    		var __result__:String;
    		for( var a in this.__status__ ) {
    			if( this.__status__[a] != undefined && __result__ == undefined ) {
    				__result__ = a;
    				trace( __result__ );
    			}
    		}
    		return this.__status__[__result__];
    	}
    	private function __primiCalcoli():Number {
    		var __n:Number = 0;
    		for( var a:Number = 1; a < 100000; a++ ) {
    			__n += a;
    		}
    		return __n;
    	}
    	private function __secondiCalcoli():Number {
    		var __n:Number = this.__status__.__primiCalcoli;
    		for( var a:Number = 1; a < 100000; a++ ) {
    			__n -= Math.random() * a;
    		}
    		return __n;
    	}
    	private function __terziCalcoli():Number {
    		var __n:Number = this.__status__.__secondiCalcoli;
    		for( var a:Number = 1; a < 100000; a++ ) {
    			__n += Math.round( a / ( a - 2 * a ) ) + a;
    		}
    		return __n;
    	}
    }

    sul primo kkeyframe del fla
    var cm:CalcoloMassiccio = new CalcoloMassiccio();

    sul quinto key frame del fla
    cm.method( '__primiCalcoli' );
    // trace( cm.getResult() ); se vuoi controllare il
    // risultato dopo __primiCalcoli

    sul decvimo keyframe del fla
    cm.method( '__secondiCalcoli' );
    // trace( cm.getResult() ); se vuoi controllare il
    // risultato dopo __secondiCalcoli

    sul quindicesimo keyframe del fla
    cm.method( '__terziCalcoli' );
    // trace( cm.getResult() ); se vuoi controllare il
    // risultato dopo __terziCalcoli

    sul ventesimo keyframe del fla
    stop();
    trace( cm.getResult() );
    // risultato totale




    e' solo un esempio di classe con stato e metodi a chiamata ritardata con informazioni a cascata ... intanto nel layer sotto puoi far muovere la pallina in motion tween , ad esempio ...
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  7. #7
    Si esatto la funzione ha certamente uno stato, bene. Quella roba che hai scritto è per MX 2004 immagino, giusto? Io lavoro cno MX, cmq non stare a riscrivere tutto per MX che tanto mi bastava capire il senso delle tue parole. Credo proprio che questo mi possa dare una grande mano.

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.