游戏开发-纯代码切图做动画

bitMap以及bitMapData的使用技巧,在flash里想要做动画做得炫,你就必须得熟知这两个玩意儿的用法,

而我们今天就来探讨其中的一种技巧:切图。
copyPixels(), 它的作用是把一个bitmapData整体中的一部分像素复制出来给另一个bitmapData,

游戏开发-纯代码切图做动画

这是一张256 * 256像素的图片,长度么应该是256 / 4 宽度也是 256 / 4

 

[Embed(source= " melee.png ")]
         private  var resource:Class;
                
         private  var displayBMP:Bitmap;
         private  var displayBMPD:BitmapData;
         private  var sourceBMPD:BitmapData;
         private  var i: int =  0;
         public function Main()
        {
            sourceBMPD = ( new resource()  as Bitmap).bitmapData;  // 先拿到目标图像数据
            displayBMP =  new Bitmap();  // 这是我们用来盛放切下来的图像数据并显示的东东哦
            addChild( displayBMP );
                   displayBMPD =  new BitmapData( 64, 64);  // 切图开始
           displayBMPD.copyPixels( sourceBMPD,  new Rectangle(  006464 ),  new Point(  00 ) );
           displayBMP.bitmapData = displayBMPD;  // 切下来的BitmapData必须放到已添加至舞台的bitmap中才能显示出来哦
         }

我们现在想做一个动画咋办?这图片一行的四张图片看起来可以组成一个连贯的攻击动作,

那我们就试试看把这四个图片组成一个动画吧。

做动画之前我们先想想具体的思路是怎样的,

我们知道,一个位图bitmap的外观改变无非就是其内部的bitmapData发生了改变而已,

那我们就隔一阵子改变一下它的BitmapData好了,

不过使用enterFrame来改变的话动画会播放太快了,因为一般的swf帧频都有30多,

就是一秒播放30多帧,此时我们就需要推出一个新的计时器类:Timer。

 

                [Embed(source= " melee.png ")]
                 private  var resource:Class;
                
                 private  var displayBMP:Bitmap;
                 private  var displayBMPD:BitmapData;
                 private  var sourceBMPD:BitmapData;
                 private  var i: int =  0;
                 public function Main()
                {
                        sourceBMPD = ( new resource()  as Bitmap).bitmapData;
                        displayBMP =  new Bitmap();
                        addChild( displayBMP );
                        
                         var timer:Timer =  new Timer( 100);  // 限定计时器每100毫秒触发一次
                        timer.addEventListener(TimerEvent.TIMER, timerHandler);
                        timer.start();  // 启动计时器
                }
                
                 private function timerHandler(  event:TimerEvent ): void{
                        displayBMPD =  new BitmapData( 64, 64);
                        displayBMPD.copyPixels( sourceBMPD,  new Rectangle( i *  6406464 ),  new Point(  00 ) ); // 因为我们要切割的4张图片都在一行上,所以只需要改变切图的x位置即可
                        displayBMP.bitmapData = displayBMPD;
                         if(i== 3)i= 0// 若是当前所切图已到行尾最后一张图片,那就从行首第一张图片从新开始切过
                         else i++;
                }
        



 

你可能感兴趣的:(游戏开发)