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

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++;
                }
        



 

原文地址:https://www.cnblogs.com/naiking/p/2272443.html