L'handler onEnterFrame non è il solo evento disponibile per gestire animazioni che si basano sul tempo. Spesso è preferibile usare setInterval, che consente, fra l'altro, di creare animazioni che scorrono a velocità differenti, e indipendenti dal frame rate del filmato.
I vantaggi nell'utilizzo di setInterval:
- Possiamo gravare in modo minore sul processore, perchè non abbiamo bisogno di aumentare il frame rate per rendere più fluida una animazione.
- Possiamo creare animazioni che vanno a velocità differenti
- Flash non perde tempo a ridisegnare lo schermo per via dell'alta frequenza dei fotogrammi (cosa che invece succederebbe se andassimo ad aumentarla)
- Sganciandosi dalla logica del frame rate, lavoariamo sul tempo, e le animazioni sono temporizzate in modo più preciso e meno dipendente dalle performance del processore
Alcuni esempi di utilizzo:
var intervallo:Number=setInterval(funzione, intervallo, argomenti);
La funzione viene chiamata ogni tot millisecondi (parametro intervallo), e gli argomenti sono quelli che possono essere passati opzionalmente alla funzione, separati da virgola.
SetInterval è un handler di eventi, diverso da un normale handler di una istanza, come onEnterFrame. Per abbinare un metodo a una istanza di un movieClip con setInterval:
var intervallo:Number=setInterval(oggetto, metodo, intervallo, argomenti);
Possiamo passare al parametro oggetto l'istanza di un movieclip e il metodo da chiamare su questa istanza nell'intervallo prefissato
Nell'esempio mostrato sopra chiamiamo moveBall, un metodo del clip ball_mc, per far muovere il clip lungo lo stage:
var intervallo:Number=setInterval(ball_mc, "moveBall", 2);
ball_mc.moveBall = function():Void {
this._x++;
if (this._x>=Stage.width-this._width) {
clearInterval(intervallo);
}
updateAfterEvent();
};
Il seguente esempio mette a raffronto una animazione frame based con una time based:
Questo il codice:
function mover():Void{
this._x+=speed;
if(this._x>=500){
clearInterval(this.interval)
}
updateAfterEvent();
}
//
function enterFrameMover():Void{
this._x+=speed;
if(this._x>=500){
delete this.onEnterFrame;
}
}
//
function disegnaPalletta(clip:MovieClip, x:Number, y:Number):MovieClip{
var mc:MovieClip=this.createEmptyMovieClip(clip.toString(), this.getNextHighestDepth())
mc.lineStyle(40, 0xcccccc, 100);
mc.moveTo(-1,0);
mc.lineTo(1,0);
mc._x=x;
mc._y=y;
return mc;
}
var speed:Number=1;
var palla1_mc:MovieClip=disegnaPalletta(palla1_mc, 200, 100);
var palla2_mc:MovieClip=disegnaPalletta(palla2_mc, 200, 200);
//passo la funzione come metodo del mc
palla1_mc.intervalMover=mover
//nome dell'intervallo
palla1_mc.interval=setInterval(palla1_mc, "intervalMover",1);
//palla 2 si muove con l'enterFrame
palla2_mc.onEnterFrame=enterFrameMover;
martedì 15 luglio 2008
Iscriviti a:
Commenti sul post (Atom)


0 commenti:
Posta un commento