//键盘事件,通过方向键更改角色移动方向;
privatefunctionkeyDownHandler(event:KeyboardEvent):void{
switch(event.keyCode){
case40:
sDirection=0;
break;
case38:
sDirection=3;
break;
case37:
sDirection=1;
break;
case39:
sDirection=2;
break;
}
}
//定时器运行事件;
privatefunctiontimerHandler(event:Event):void{
//删除旧的角色动作图像;
if(map!=null){
removeChild(map);
}
//显示新的角色动作图像;
map=newBitmap(maps[sDirection][pointer]);
addChild(map);
//角色动作循环处理;
if(pointer<sStep-1){
pointer ;
}else{
pointer=0;
}
}
//加载图片完成处理事件;
privatefunctioncompleteHandler(event:Event):void{
//根据图片的大小初始化BitmapData;
/*
*注意如果你要保留原来的图片的透明度的话,必将transparent设置为true,同时设置填充色值的前两位为00;
*/
varsBmd:BitmapData=newBitmapData(loader.width,loader.height,true,0x00FFFFFF);
sBmd.draw(loader);
//计算移动步数;
sStep=Math.floor(loader.width/sWidth);
for(varj:uint=0;j<Math.floor(loader.height/sHeight);j ){
vararr:Array=newArray();
for(vari:uint=0;i<sStep;i ){
varbmd:BitmapData=newBitmapData(sWidth,sHeight,true,0x00FFFFFF);
//获取单个角色的BitmapData对象;
bmd.copyPixels(sBmd,newRectangle(sWidth*i,sHeight*j,sWidth,sHeight),newPoint(0,0));
arr.push(bmd);
}
//放入角色数组里;
maps.push(arr);
}
//释放sBmd资源;
sBmd.dispose();
//开始运行角色动作;
timer.start();
}
}
}
载入外部png图片,然后使用BitmapData类非常理想,最大的问题是:从表面上看图片是透明的,但是其实图片是一个矩形,所以这个矩形区域会遮住它下面的内容,所以当你用鼠标点击这个矩形区域时,你的鼠标是在矩形区域上而不是它下面的内容(其实这就好比你把一个 movieClip的alhpa值设为0,看上去什么都没有,但是它却实实在在地存在)。所以如果你的人物是通过鼠标来操作它的行走,这个时候可能会有一些问题了。