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


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



     

  • 相关阅读:
    在mvc4中上传、导入和导出excel表方法总结
    ASP.NET MVC:通过 FileResult 向 浏览器 发送文件
    .net下使用NPOI读取Excel表数据
    详解免费高效实用的.NET操作Excel组件NPOI(转)
    Vue 定时执行函数
    decorators.xml的用法
    行内元素和块级元素
    C/C++中printf和C++中cout的输出格式
    IIS 搭建过程
    IIS访问共享文件详解
  • 原文地址:https://www.cnblogs.com/naiking/p/2272443.html
Copyright © 2020-2023  润新知