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 中用 双向

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