在以往用2做些网站类的应用的时候,经常由一个事件激活若干个tween动画,在2环境下的tween类我是用的网上下载的mxp扩展包来实现应用的:  mc.tween("_height",20,1.0,"easeOutQuad",0,callbackfuc);
在学习3的过程中自带的tween类写法发生了变化,这都好说,不过看到些文章谈到3里的tween如果同时由若干个tween对象一起动作的话,系统资源占用很大,甚至会停止动作,在2中,我还从来没有遇到这样的情况,哪怕我同时用了很多个tween动作。

还真是这样,我定义了多个TWEEN的时候,有些TWEEN自动放到一半的时候就自己中止不放了,又得做代码上的修改优化。不过后来发现可能不是这个原因,做的东西占系统资源应该不大。在网上查了查以后,发现也有人出现这样的问题——

http://bbs.actionscript3.cn/thread-5254-1-1.html

http://bbs.actionscript3.cn/thread-6132-1-1.html

最后得出的结论是—— FLASH自带的TWEEN类,偶尔会出莫名其妙的问题,原因往往是因为tween是在函数里声明的,所以会被垃圾回收站回收。回收后Tween还没有运动完,结果就停那不动了。

 

解决办法:

1: 声明为类变量就行了。在函数的外面定义好Tween变量。(将它提升为private的, 跳出那个函数的管辖),而不是在函数内部,这样不会回收。

2:   方法1只能暂时解决一些问题,因为你用的Tween是用的time模式, 这种模式当cpu执行构造一个超级肥的类时,这个Tween的时间在走, 但缓动得不到执行(没CPU嘛), 时间一到,Tween停止….但位置还没到位…..绝对能解决Tween没执行完就被干掉的问题的是: 不用time为true的模式,而用帧模式,至少我是这么解决问题的。

3: 或者可以找出Tween这个类,把这句_mc.addEventListener(Event.ENTER_FRAME, this.onEnterFrame, false, 0, true);
的最后一个参数弱引用改为false,垃圾回收器就不会回收了。(不过这样如果需要回收的话,就得手动了,不知道之后会有什么衍生的影响没有)。

4: 大家推荐的不用FLASH自带的TWEEN类,网上缓动的类目前还有Tweener和TweenLite。其中TweenLite推荐的人最多,说效率高,而且一次改变若干属性,方便。下载及教程地址 http://blog.greensock.com/tweenliteas2/

日志类别:Flash, Tutorial
标签:

此日志还没人评论

称呼(必填)※
邮箱(必填)※
网站(随意)