今天是周末,做了个放大镜效果。原理是这样的:使用两份同样的图,将其中的一份缩小,使用遮罩效果,放大镜所到之处遮住小图,显示大图这就有了放大的效果了。步骤如下:
1.导入一张图片,并为ActionScript代码导出类名为baby(随便起)。
2.创建两个Bitmap类实例,分别命名为bitmap和bitmap2。
3.创建一个baby实例并复制给bitmap,作为大图,并加到显示列表中去。
4.声明两个BitmapData实例分别命名为bitdata和bitdata2,并将bitmap的数据通过bitmapData属性传递给bitdata。使用bitdata的clone方法复制一份bitdata并传递给bitdata2.这样就有了两份图了。而且这两幅图相互重叠,大小一致。
5.将其中的bitmap缩小,作为默认图。这样没有放大镜的地方,我们看到的是缩小的图。
6.使用API绘制一个圆形,作为放大镜。并且设置buttonMode属性为真,放大镜就具有了鼠标的特性。
7.将bitmap的蒙版设置为放大镜。
Code:
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.<a href=http://www.flashabc.net/catalog.asp?tags=MovieClip>MovieClip</a>;
import flash.display.Sprite;
import flash.events.Event;
var bitmap:Bitmap;
var bitmap2:Bitmap;
var toBig:Sprite = new Sprite();
initMap();
Mouse.hide();
function initMap() {
var baby1:baby=new baby(650,560);
bitmap=new Bitmap(baby1);
addChild(bitmap);
var bitdata:BitmapData=bitmap.bitmapData;
var bitdata2:BitmapData=bitdata.clone();
bitmap.scaleX=bitmap.scaleY=0.6;
bitmap.x=stage.stageWidth/2-bitmap.width/2;
bitmap.y=stage.stageHeight/2-bitmap.height/2;
bitmap2=new Bitmap(bitdata2);
addChild(bitmap2);
bitmap2.cacheAsBitmap=true;
bitmap2.x=stage.stageWidth/2-bitmap2.width/2;
bitmap2.y=stage.stageHeight/2-bitmap2.height/2;
initFilter();
}
function initFilter() {
toBig.graphics.lineStyle(2,0xff0000);
toBig.graphics.beginFill(0x000000);
toBig.graphics.drawCircle(0, 0, 60);
toBig.graphics.endFill();
addChild(toBig);
toBig.buttonMode=true;
toBig.cacheAsBitmap=true;
bitmap2.mask=toBig;
this.addEvent<a href=http://www.flashabc.net/catalog.asp?tags=List>List</a>ener(Event.ENTER_FRAME, onHandler);
}
function onHandler(e:Event) {
toBig.x=mouseX+30;
toBig.y=mouseY+30;
}