This is a discussion on BitmapData e metodo draw within the Articoli e tutorials forums, part of the Flash CS3 e Actionscript 3.0 category; La classe BitmapData è un mondo meraviglioso. Ci permette di lavorare con le immagini, animarle, 'giocare' coi loro pixels e ...
La classe BitmapData è un mondo meraviglioso. Ci permette di lavorare con le immagini, animarle, 'giocare' coi loro pixels e tanto altro ancora. Per chi non si fosse mai avvicinato a questa classe, proverò a rendergli la vita più facile partendo dal metodo draw della BitmapData. Cosa fa il metodo draw ? Per semplificare, si può dire che questo metodo scatta una fotografia ad un oggetto passatogli come parametro (source). Questo metodo richiede 6 parametri ...
ma in questo tutorial ne userò solo uno in modo da rendere semplice l'avvicinamento alla classe. Il parametro in questione è appunto source, cioè il nome istanza dell'oggetto che vogliamo 'fotografare'.
Entriamo nel vivo:
- creo un FLA e lo salvo con nome ' bitmapdata_draw.fla ' al cui interno creo una MovieClip e la animo con delle interpolazioni frame to frame.
- creo la Document Class, un file AS che salvo con nome ' Drawing.as '
package
{
import flash.display.MovieClip;
import flash.display.SimpleButton;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.events.*;
public class Drawing extends MovieClip
{
private var bitmap:BitmapData;
private var bitmaps_array:Array;
private var W:int=100;
private var H:int=100;
private var ratio:int=5;
private var clipCounter:int=0;
private var distance:int=10;
private var lines:int=0;
public function Drawing()
{
stage.frameRate=31;
clip_mc.stop();
init();
}
private function init():void
{
bitmaps_array=new Array();
clip_mc.play();
addEventListener(Event.ENTER_FRAME,onEnterFrameDraw);
}
private function onEnterFrameDraw(event:Event):void
{
if(!(clip_mc.currentFrame%ratio))
{
bitmap=new BitmapData(W,H,true,0xFFFFFFFF);
bitmap.draw(clip_mc);
bitmaps_array.push(bitmap);
var image:Bitmap=new Bitmap(bitmap);
addChild(image);
image.y=150+distance;
image.x=(W+distance)*clipCounter;
if(!(clipCounter%ratio)&&clipCounter!=0)
lines++;
image.y+=(100+distance)*lines;
image.x=(W+distance)*(clipCounter-(ratio*lines));
clipCounter++;
}
if(clip_mc.currentFrame==clip_mc.totalFrames)
{
removeEventListener(Event.ENTER_FRAME,onEnterFrameDraw);
initButtonListener();
}
}
private function initButtonListener():void
{
ripeti_btn.addEventListener(MouseEvent.MOUSE_DOWN,clearData);
}
private function removeButtonListener():void
{
ripeti_btn.removeEventListener(MouseEvent.MOUSE_DOWN,clearData);
}
private function clearData(event:MouseEvent):void
{
for(var i:int=0;i < bitmaps_array.length;i++)
{
bitmaps_array[i].dispose();
}
removeButtonListener();
clip_mc.gotoAndStop(1);
clipCounter=0;
lines=0;
init();
}
}
}
Risultato:
Nello script, sotto intervallo onEnterFrame, conrollo il numero del frame corrente della MovieClip che abbiamo sul FLA.
Se è un multiplo di 5 allora creo una nuova BitmapData che poi passo come valore a new Bitmap(BitmapData) e faccio un addChild della bitmap o altrimenti non sarebbe visibile.
Il resto del codice è per posizionare le immagini create e gestire gli eventi del bottone ' ripeti '.
Allego i files sorgente: