WEB开发网
开发学院图形图像Flash 在flash中用双向链表实现受控动画 阅读

在flash中用双向链表实现受控动画

 2010-07-22 00:00:00 来源:WEB开发网   
核心提示:虽然flash中对实现连续的动画有很好的支持, 但是在编写游戏的时候,在flash中用双向链表实现受控动画,这还远远不够好,场景:你的英雄比怪物先一帧击中了对方,使用uint型能在数十天内良好运行,考虑到游戏规模,对方因为受到攻击原本准备法术的动作被停止了,这个时候下一帧不能继续播放准备法术/释放法术的动画了

虽然flash中对实现连续的动画有很好的支持, 但是在编写游戏的时候,这还远远不够好。

场景:你的英雄比怪物先一帧击中了对方,对方因为受到攻击原本准备法术的动作被停止了。这个时候下一帧不能继续播放准备法术/释放法术的动画了,而应该及时播放怪物被击中的动画。

游戏中这类场景是比较常见的,这就要求重新实现一个更好控制,更易改变的动画控制系统。

我决定自己实现一个动画调度器来控制所有的动画。这个调度器需要能在整个系统绘制新帧的时候做出合适响应。我采用的方式是监听系统的enterFrame事件,并且保留一个自系统开始以来frame计数。按FPS=60计算,使用uint型能在数十天内良好运行,考虑到游戏规模,这个时间已经足够长了 ^-^

1 public class AnimationDispatcher{
2  //帧数统计
3  private var _frameCounter : uint;
4   
5  public function listenEnterFrame(e:Event):void{
6   _frameCounter++;
7  }
8 }

接下来实现被控制的动画。

01 public interface IActionFrame{
02   
03  //下一次需要执行的帧数
04  function get nextActionFrame():uint;
05   
06  //执行动作
07  function doAction():void;
08   
09  //执行完doAction后是否需要把对象重新放回list中
10  function needToPushBack():Boolean;
11 }

链表的节点:

01 internal class ListNode{
02  private var _previous : ListNode;
03  private var _next : ListNode;
04  private var _item : IActionFrame;
05   
06  public function ListNode(item:IActionFrame){
07   _item = item;
08  }
09   
10  public function get previous():ListNode{
11   return _previous;
12  }
13   
14  public function set previous(value:ListNode){
15   _previous = value;
16  }
17   
18  public function get next():ListNode{
19   return _next;
20  }
21  public function set next(value:ListNode):void{
22   _next = value;
23  }
24  public function get item():IActionFrame{
25   return _item;
26  }
27 }

1 2  下一页

Tags:flash 中用 双向

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接