AS3.0中人物行走代码剖析。

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

  具体代码如下:

ExpandedBlockStart.gif 人物行走代码
 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,  true 0 );
28              _bmd.draw(png);
29              _arr = fillArr(_bmd,  4 4 , _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,这个类不仅能将图片切割,而且能实现图片的马赛克效果等。

转载于:https://www.cnblogs.com/huomiao/archive/2009/12/17/1626293.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在信号处理领域,DOA(Direction of Arrival)估计是一项关键技术,主要用于确定多个信号源到达接收阵列的方向。本文将详细探讨三种ESPRIT(Estimation of Signal Parameters via Rotational Invariance Techniques)算法在DOA估计的实现,以及它们在MATLAB环境的具体应用。 ESPRIT算法是由Paul Kailath等人于1986年提出的,其核心思想是利用阵列数据的旋转不变性来估计信号源的角度。这种算法相比传统的 MUSIC(Multiple Signal Classification)算法具有较低的计算复杂度,且无需进行特征值分解,因此在实际应用颇具优势。 1. 普通ESPRIT算法 普通ESPRIT算法分为两个主要步骤:构造等效旋转不变系统和估计角度。通过空间平移(如延时)构建两个子阵列,使得它们之间的关系具有旋转不变性。然后,通过对子阵列数据进行最小二乘拟合,可以得到信号源的角频率估计,进一步转换为DOA估计。 2. 常规ESPRIT算法实现 在描述提到的`common_esprit_method1.m`和`common_esprit_method2.m`是两种不同的普通ESPRIT算法实现。它们可能在实现细节上略有差异,比如选择子阵列的方式、参数估计的策略等。MATLAB代码通常会包含预处理步骤(如数据归一化)、子阵列构造、旋转不变性矩阵的建立、最小二乘估计等部分。通过运行这两个文件,可以比较它们在估计精度和计算效率上的异同。 3. TLS_ESPRIT算法 TLS(Total Least Squares)ESPRIT是对普通ESPRIT的优化,它考虑了数据噪声的影响,提高了估计的稳健性。在TLS_ESPRIT算法,不假设数据噪声是高斯白噪声,而是采用总最小二乘准则来拟合数据。这使得算法在噪声环境下表现更优。`TLS_esprit.m`文件应该包含了TLS_ESPRIT算法的完整实现,包括TLS估计的步骤和旋转不变性矩阵的改进处理。 在实际应用,选择合适的ESPRIT变体取决于系统条件,例如噪声水平、信号质量以及计算资源。通过MATLAB实现,研究者和工程师可以方便地比较不同算法的效果,并根据需要进行调整和优化。同时,这些代码也为教学和学习DOA估计提供了一个直观的平台,有助于深入理解ESPRIT算法的工作原理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值