2024年4月19日发(作者:)

GMovieClipBase

tick为系统的相对时间单位,也被称为系统的时基,来源于定时器的周期性中断,一

次中断表示一个tick。

大家都知道,FLASH的ENTER_FRAME的触发间隔是不确定的,受到浏览器和当时

的资源分配情况影响,原因就在于FLASH是基于帧而不是基于时基的。在网站和动画中,

这个缺陷的影响并不大,但在游戏里则不一样了。时基的不统一就如同开了变速齿轮一般,

会造成各种未知的影响,因此,这是一个必须解决的问题。

统一时基的方法有很多,GhostCat采用的是一种更倾向与性能的方法。它的时基事

件依然是由ENTER_FRAME发出的(而不是Timer),并通过getTimer()方法获得两次事

件的间隔毫秒数,并以这个间隔值为参数对不同的情况分别进行处理。这个做法稍显复杂,

且触发次数依然不固定,但能够和FLASH的屏幕刷新同步,而且不会产生多余的渲染次数。

事实上,TweenLite/Max和Tweener的主要区别就是采用Timer还是ENTER_FRAME,

GhostCat使用的是和TweenMax完全相同的处理方式。

实现时基的类是,它会不停地发布TickEvent事件,附带上作为时间间隔的

interval属性。Creater就有直接利用Tick来调节时基的

做法。只要记得interval代表的是速度就可以了。

当然,这个利用interval的方式的确没有固定间隔的事件发布容易理解。好在一般也

不怎么需要手动处理interval。运动方面只要使用内部TweenUtil(或者TweenMax)就

可以自动实现时基,而动画方面,则是现在要讲的内容。GMovieClipBase。

GMovieClipBase是采用这种时基方式实现的动画。因为FLASH的动画并不是基于时

基的,所以必须手动实现动画跳转。也因为如此,每一个动画都拥有了自己的frameRate,

自己的播放速度。但,并不仅仅是如此。

GMovieClipBase的动画是完全自主控制的,所以,即使做一些多余的判断也不浪费

性能(自主控制动画的确会消耗性能,但为了实现时基这是必须的)。GMovieClipBase会

自动根据动画的标签来为动画分段,并通过加入队列来进行动画的排队播放,诸如这样的

代码:

el("startjump",1);

abel("jump",1);

abel("slip",3);

abel("slipstop",1);

abel("normal",-1)

这段代码的结果会让动画先播放完整个标记为startjump的部分,然后挑转到jump

标签播放,接着是slip,这次会播放3次,然后跳转到slipstop,最后执行循环播放normal,

直到下一次setLabel。

形象地说,就是先做出起跳动作,然后跳起完成整个跳跃动作,然后开始做滑行动作,

接着受身,最后回到普通状态……