Flash AS3对单个图片进行角色动作化处理

2019-10-08 19:23:36王冬梅
  • //键盘事件,通过方向键更改角色移动方向;
  • 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,看上去什么都没有,但是它却实实在在地存在)。所以如果你的人物是通过鼠标来操作它的行走,这个时候可能会有一些问题了。