zoukankan      html  css  js  c++  java
  • AS3.0中人物行走代码剖析。

      先提供下人物行走图片素材:
         
      根据以上图片实现人物行走的具体实现方法是:通过改变Bitmap实例的bitmapData属性,来动态的改变Bitmap实例在舞台上的显示。
    然后设置enterFrame 或 Timer事件,使Bitmap实例的bitmapData属性不断的改变,就可以实现人物行走的效果。

      具体代码如下:

    人物行走代码
     1 package
     2 {
     3     import flash.display.Bitmap;
     4     import flash.display.BitmapData;
     5     import flash.display.DisplayObject;
     6     import flash.display.Sprite;
     7     import flash.events.MouseEvent;
     8     import flash.events.TimerEvent;
     9     import flash.geom.Matrix;
    10     import flash.utils.Timer;
    11     [SWF(width=32,height=48)]
    12 
    13     public class main extends Sprite
    14     {
    15         [Embed(source="img/B3.PNG")]
    16         private var MovePng:Class;
    17         private var _bmp:Bitmap;
    18         private var _bmd:BitmapData;
    19         private var _arr:Array;
    20         private var timer:Timer;
    21         private var i:uint=0;
    22         private var j:uint=0;
    23 
    24         public function main()
    25         {
    26             var png:DisplayObject=new MovePng();
    27             _bmd=new BitmapData(png.width, png.height, true0);
    28             _bmd.draw(png);
    29             _arr=fillArr(_bmd, 44, _arr);
    30             _bmp=new Bitmap();
    31             addChild(_bmp);
    32             _bmp.bitmapData=_arr[0][0];
    33             timer=new Timer(150);
    34             timer.addEventListener(TimerEvent.TIMER, onTimer);
    35             stage.addEventListener(MouseEvent.MOUSE_DOWN, move);
    36         }
    37 
    38         private function onTimer(e:TimerEvent):void
    39         {
    40             _arr[i].push(_arr[i].shift());
    41             _bmp.bitmapData=_arr[i][0];
    42         }
    43         
    44         private function move(e:MouseEvent):void
    45         {
    46             timer.stop();
    47             j=j==0?1:0;
    48             if(j==1){
    49                 i=++> 3 ? 0 : i;
    50                 timer.start();
    51             }
    52         }
    53 
    54         private function fillArr(bmd:BitmapData, wNum:uint, hNum:uint, arr:Array):Array
    55         {
    56             arr=[];
    57             var mx:Matrix=new Matrix();
    58             var sw:Number=bmd.width / wNum;
    59             var sh:Number=bmd.height / hNum;
    60             var _bmd:BitmapData=new BitmapData(sw, sh);
    61             for (var i:uint=0; i < hNum; i++)
    62             {
    63                 arr[i]=[];
    64                 for (var j:uint=0; j < wNum; j++)
    65                 {
    66                     _bmd=_bmd.clone();
    67                     mx.tx=-1 * sw * j;
    68                     mx.ty=-1 * sh * i;
    69                     _bmd.draw(bmd, mx);
    70                     arr[i][j]=_bmd;
    71                 }
    72             }
    73             return arr;
    74         }
    75     }
    76 }
    77 

    演示效果见

      实现要点:通过Matrix将人物行走图片的各个动作分离出来,放进数组里(此时数组里的每个元素都是BitmapData的一个实例),然后遍历数组的各个项。
    关键点1:Bitmap的bitmapData属性改变后,Bitmap的显示即发生改变。
    关键点2:BitmapData实现draw方法后,BitmapData即发生变化,代码中66行_bmd=_bmd.clone();是将一个新的实例赋值给了_bmd,相当于又建立了个BitmapData的实例。这样一来通过draw方法就不会改变原来的_bmd的内容了。如果没有这一行,那么数组里的每个元素将都是一模一样的值即都是最后一个_bmd,将不会实现行走效果。
    关键点3:Matrix,这个类不仅能将图片切割,而且能实现图片的马赛克效果等。

  • 相关阅读:
    [置顶] Extjs4 异步刷新书的情况下 保持树的展开状态
    控制系统中常用的名词术语
    开环控制系统与闭环控制系统
    反馈控制
    Tensorflow把label转化成one_hot格式
    Tensorflow——tf.nn.max_pool池化操作
    Tensorflow——tf.nn.conv2d卷积操作
    Tensoflow简单神经网络实现非线性拟合
    Tensorflow 中的 placeholder
    Tensorflow 中的constant、Session、placeholde和 Variable简介
  • 原文地址:https://www.cnblogs.com/huomiao/p/1626293.html
Copyright © 2011-2022 走看看