Ho una mezza idea su un action game 2d che da tempo mi frulla per la testa. Il mio dubbio iniziale era: disegnare i personaggi in flash, oppure con un programma bitmap?
Teoricamente, quando ci sono molte linee vettoriali complesse e si sfruttano al massimo eventi ricorsivi, Flash si affatica maggiormente. Dopo aver spulciato il mio archivio, sono riuscito a trovare questo un vecchio esempio basato sui drawing methods.
Teoricamente, quando ci sono molte linee vettoriali complesse e si sfruttano al massimo eventi ricorsivi, Flash si affatica maggiormente. Dopo aver spulciato il mio archivio, sono riuscito a trovare questo un vecchio esempio basato sui drawing methods.
stage.frameRate=120;
var campo:TextField=new TextField();
var clip:MovieClip=new MovieClip();
for(var i:int=0; i<2500; i++){
clip.graphics.lineStyle(1, Math.random()*20+1);
clip.graphics.moveTo(Math.random()*200+1, Math.random()*200+1);
clip.graphics.lineTo(Math.random()*200+1, Math.random()*200+1);
}
campo.x=420;
campo.y=350;
campo.width=80;
campo.height=20;
campo.border=true;
campo.type=TextFieldType.DYNAMIC;
campo.text="vettoriale";
stage.addChild(clip);
stage.addChild(campo);
function rand(e:Event):void{
clip.x= Math.random()*100;
clip.y= Math.random()*100;
}
function bit(e:MouseEvent):void{
clip.cacheAsBitmap=!clip.cacheAsBitmap;
if(clip.cacheAsBitmap){campo.text="bitmap";}
else{campo.text="vettoriale";}
}
stage.addEventListener(Event.ENTER_FRAME,rand);
stage.addEventListener(MouseEvent.CLICK,bit);
var campo:TextField=new TextField();
var clip:MovieClip=new MovieClip();
for(var i:int=0; i<2500; i++){
clip.graphics.lineStyle(1, Math.random()*20+1);
clip.graphics.moveTo(Math.random()*200+1, Math.random()*200+1);
clip.graphics.lineTo(Math.random()*200+1, Math.random()*200+1);
}
campo.x=420;
campo.y=350;
campo.width=80;
campo.height=20;
campo.border=true;
campo.type=TextFieldType.DYNAMIC;
campo.text="vettoriale";
stage.addChild(clip);
stage.addChild(campo);
function rand(e:Event):void{
clip.x= Math.random()*100;
clip.y= Math.random()*100;
}
function bit(e:MouseEvent):void{
clip.cacheAsBitmap=!clip.cacheAsBitmap;
if(clip.cacheAsBitmap){campo.text="bitmap";}
else{campo.text="vettoriale";}
}
stage.addEventListener(Event.ENTER_FRAME,rand);
stage.addEventListener(MouseEvent.CLICK,bit);
Copiando questo codice nel primo fotogramma di un filmato Flash, viene creato un rettangolo di 200 px per 200, composto da 2500 linee vettoriali. Un evento enterFrame impostato su 120 fps muove casualmente il clip sulle coordinate x e y. Ad ogni clic si imposta l'oggetto di visualizzazione alternativamente da vettore ad una rappresentazione bitmap. E la differenza si vede. Quando cacheAsBitmap vale true, il clip si muove molto più velocemente: in altre parole, Flash fa meno fatica a muovere la figura bitmap.
Chiaramente, questo è un esempio "estremo". Un pupazzetto colorato che corre e salta, per quanto lavorato e definito, non è certo pesante come il mostro di linee vettoriali creato con lo script. E probabilmente, le performance messe a disposizioni oggi, non sono paragonabili a quelle di qualche anno fa. Ciò nonostante, la prudenza non è mai troppa. Avendo in mente di usare molti gradienti, e anche grazie ai suggerimenti raccolti da chi ne sa più di me, credo proprio che opterò per le bitmap, con tutte le scocciature che questa scelta comporterà.
Chiaramente, questo è un esempio "estremo". Un pupazzetto colorato che corre e salta, per quanto lavorato e definito, non è certo pesante come il mostro di linee vettoriali creato con lo script. E probabilmente, le performance messe a disposizioni oggi, non sono paragonabili a quelle di qualche anno fa. Ciò nonostante, la prudenza non è mai troppa. Avendo in mente di usare molti gradienti, e anche grazie ai suggerimenti raccolti da chi ne sa più di me, credo proprio che opterò per le bitmap, con tutte le scocciature che questa scelta comporterà.


0 commenti:
Posta un commento