照相机需要有两个重要的部件:镜头、胶卷或闪存。用镜头取景,用胶卷或闪存存储影像,还需要按下快门激发照相的动作。使用AS3.0制作Flash照相机也需要这些对象。在ACtionScript3.0中BitmapData类相当于一个看不见的镜头用来取景;Bitmap类相当于闪存用来存储照片,而BitmapData类的draw()方法相当于快门实施照相的动作。你可以按照以下步骤制作Flash照相机:
1.导入涉及到的相关包并声明要用到的实例。
2.使用API绘制一个矩形框,用于可视的镜头外框,设置边框为红色,背景为透明。
3.可视镜头需要在舞台上随鼠标移动,这就需要侦听ENTER_FRAME事件。在处理函数中将镜头和鼠标坐标关联起来,这样镜头就可以在舞台上拖动了。
4.当我们按下鼠标时,应用程序将实施照相的动作,这就需要一个鼠标单击侦听器。
上面说了,BitmapData类相当于一个看不见的镜头,在创建实例时,我把它设置的和舞台同样大,是整个舞台。而在draw()中,我们设置了一个看不见的矩形,把这个矩形设置的和上面的可是镜头重合起来,并且在照相的时候,隐藏可视镜头以外的图像,这样就实现了部分取景的功能了。
最后,我们还设置了Bitmap实例——胶卷所处的位置。
Code:
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.geom.Rectangle;
var myBitmapData:BitmapData;
var bmp:Bitmap;
var rect:Rectangle;
var circle:Sprite=new Sprite();
circle.graphics.lineStyle(2,0xff0000);
circle.graphics.beginFill(0xffffffff);
circle.graphics.drawRect(0,0,100,100);
circle.graphics.endFill();
addChild(circle);
addEvent<a href=http://www.flashabc.net/catalog.asp?tags=List>List</a>ener(Event.ENTER_FRAME,onframe);
stage.addEventListener(<a href=http://www.flashabc.net/catalog.asp?tags=MouseEvent>MouseEvent</a>.CLICK,onclick);
function onframe(e:Event):void {
circle.x=mouseX-100;
circle.y=mouseY-100;
rect=new Rectangle(circle.x,circle.y,100,100);
myBitmapData=new BitmapData(stage.stageWidth,stage.stageHeight,true,0x000000ff);
}
function onclick(e:MouseEvent):void {
myBitmapData.draw(stage,null,null,null,rect,true);
bmp=new Bitmap(myBitmapData);
this.addChild(bmp);
bmp.x=235-circle.x;
bmp.y=0-circle.y
}