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。
形象地说,就是先做出起跳动作,然后跳起完成整个跳跃动作,然后开始做滑行动作,
接着受身,最后回到普通状态……
发布评论