`
ch_kexin
  • 浏览: 897883 次
  • 性别: Icon_minigender_2
  • 来自: 青岛
社区版块
存档分类
最新评论

as3 T ween

 
阅读更多

在以往用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/






GreenSock 網站」提供的 Tween 系列一共有三個版本:

1.「TweenMax」完整版 http://blog.greensock.com/tweenmaxas3/

2.「TweenLite」輕裝版 http://blog.greensock.com/tweenliteas3/

3.「TweenFilterLite」濾鏡版 http://blog.greensock.com/tweenfilterliteas3

又有新发现,最近做项目在用Tweener,在找一些相关资料的时候发现了一个swf,比较了 Tweener,TweenLite,TweenMax以及内置的Tween,真是不比不知道,一比吓一跳,从执行效率上来说 TweenLite 》TweenMax 》Tweener 》Tween 而且前2个比后2个在大型运算中快不止一点点。

之前Tweener支持类似引导 点的动效,还有使用价值,现在TweenMax也带了这样的功能,效率更高,当然就选用后者啦。
http://flex.ui.blog.163.com/blog/static/5107353620092233121221/

Tweenmax 是TweenLite和TweenFilterLite的基础上建立的。目的在于使得tweening家族具备更加大众化的功 能......Tweenmax同样使用简单易学的语法。实际上,因为Tweenmax是演化版,所以TweenMax可以实现TweenLite和 TweenFilterLite的所有功能,或者更多。那么,你可能要问,为什么不仅仅弄一个类呢?这是个很好的问题。这是因为我们的目的在于用最小的代 码实现最好的效果。坦白说,90%的项目可能需要TweenLite,一个3K的类。这使得整个项目非常高效率地简单的实现需要的效果。但是如果你需要 tween filters或者更多的效果......就要用到6K大小的TweenFilterLite。还要更多功能?没问题,使用9K大小的(看起来十分臃肿 的?)TweenMax实现更多功能。下面的列表展示了这三个类之间的不同之处。TweenMax引入了一项创新的功能,叫做 "bezierThrough",一个能够让你通过运动曲线定义相关的点(而不是用普通的方法......)又或者用有规律的贝赛尔曲线-只要你愿意。它 甚至会处理你的物体的旋转,来调整你的方向。看看下面的例子吧。点击添加贝赛尔点。

版本 : 8.02

日期 : 8/24/2008

ACTIONSCRIPT 语言版本 : 3.0 (AS2 版也有提供 )

更新 更多文档请访问 : http://www.TweenLite.com ( 这里的链接指向 AS3 )

描述:
缓动。 我们都在做。我们很多人都知道除了 Adobe 's Tween 类之外,还有很多更好的动画引擎,(比如 Tweener). 每种引擎都有它们各自的优缺点。
最近几年,为了得到一个更紧凑的,跑得更快,效率更高的引擎,我创建了 TweenLite (我无法接受其它的一些引擎带来的文件尺寸上的负担).它很快就融入到我的所有工作中。我告诉其它人,让大家能够从中获益,最终,我将它发布了出来。在过 去的几年中,TweenLite越来越受欢迎,超乎了我的想像.
基于此,我又添加了一些新的功能,并且尽量保持这个文件的尺寸,让它小于3K。 TweenFilterLite 扩充了 TweenLite 并且加入了滤镜缓动,包含了 ColorMatrixFilter 的一些效果,比如饱和、对比、增亮、色调,甚至是着色,但文件的尺寸始终没有超过3K。与 TweenLite 的做法相似,提供有AS2版和AS3版的类包下载。
TweenMax 比 TweenFilterLite 增加了更多的特性,包含 bezier 缓动,暂停/恢复,顺序执行等等。(见 http://www.tweenmax.com/ )
我猜你会想“如果这个是‘轻量级的’,那么它一定会丢掉很多特性,让我用的时候会有点担心”。这种想法是对的,在这里缺少一些其它缓动引擎所包含的特效, 但是我可以肯定的说,在过去几年我的工程(很多获奖的 flash 程 序 以及500强企业的项 目 中)中,我几乎一直都在用它,而它从没有让我失望过。
我还真没发现过我还需要其它的功能。你可以对任何的属性(包括 DisplayObject 对 象 的音量和颜色)使用缓动函数,内置的延迟时间,回调函数,以及传递参数给这些
回调函数,甚至根据数 组 进行缓动,统统只在一行代码中完成。如果你需要更多的特效,你可以装上TweenFilterLite 或者 TweenMax来用用。

TweenLite参数说明:
1) $ target : Object - 作为目标的对象, MovieClip或者其它对象
2) $ duration : Number - 动画的时间长度(单位:秒)
3) $ vars : Object – 对象,通过属性值,来存贮各种属性参数用于缓动。(如果你使用 TweenLite.from() 方法,这里的参数表示缓动的初始值)
该对象所具有的属性:
alpha: alpha目标对象应该完成 (或开始,当使用 TweenLite.from()时)的透明度级别.如果 target.alpha 是1,当缓动被执行的时候,你指定参数为 0.5,它将把透明度从 1 缓动到 0.5.
x: 改变 MovieClip的 x 位置,把这个值设置成你希望的 MovieClip 的结束位置(如果你使用的是 TweenLite.from()这个值表示开始位置).
( y scaleX scaleY rotation 等属性不再重复说明)
特别的属性 (**可选的**):
delay : Number - 延迟缓动 (以秒为单位).
ease : Function - 缓动函数. 例如,fl.motion.easing.Elastic.easeOut 函数。默认的是 Regular.easeOut函数。
easeParams : Array - 用来存贮缓动公式所需要的额外数据. 当使用 Elastic 公式并且希望控制一些额外的参数,比如放大系数和缓动时间。大多数的缓动公式是不需要参数的,因此,你不需要给其它的缓动公式传递参数。
autoAlpha : Number - 用它来代替 alpha 属性,可以获得一些副加的效果,比如当 alpha 值缓动到 0时,自动将 visible 属性改为 false。当缓动开始前,autoAlpha 大于 0时,它将会把 visible 属性变成 true 。
visible : Boolean - 在缓动结束时,想要指定 DisplayObject 的 visible 属性,请使用这个参数。
volume : Number - 对 soundTransfor m (MovieClip/SoundChannel/NetStream 等)对象中的volume属性(音量大小)进行缓动
tint : Number - 改变 DisplayObject 的颜色,设置一个16进制颜色值之后,当缓动结束时,目标对象将被变成这个颜色,(如果使用的是TweenLite.from(),这个值将表示目标对象 开始缓动时的颜色)。举个例子,颜色值可以设定为: 0xFF0000。
removeTint : Boolean - 要移除 DisplayObject 颜色,将这个参数设成 true 。
frame : Number - 将 MovieClip 缓动到指帧频。
onStart : Function - 在缓动开始时想要执行某个函数,就将函数的引用(通常是函数名)放到这里。如果缓动是带延迟的,那么在缓动开始前该函数不会被执行。
onStartParams : Array - 为缓动开始时要执行的函数传递参数。(可选的)
onUpdate : Function - 缓动过程中,每次更新时调用这里指定的函数(缓动开始后,每一帧被触发一次),
onUpdateParams : Array - 给 onUpdate 参数指定的函数传递参数 (可选的)
onComplete : Function - 缓动结束时执行的函数。
onCompleteParams : Array - 给 onComplete 参数指定的函数传递参数 (可选的)
persist : Boolean - 值为 true 时,TweenLite 实例将不会自动被系统的垃圾收集器给收走。但是当新的缓动出现时,它还是会被重写(overwritten)默认值为 false.
renderOnStart : Boolean - 如果你使用带有延迟缓动的 TweenFilterLite.from() ,并且阻止缓动的渲染(rendering )效果,直到缓动真正开始,将这个值设为 true.默认情况下该值为 false ,这会让渲染效果立即被执行,甚至是在延迟的时间还没到之前。
overwrite : int - 当前的缓动被创建以后,通过这个参数可以限制作用于同一个对象的其它缓动,可选的参数值有:
- 0 (没有): 没有缓动被重写。这种模式下,运行速度是最快的,但是需要注意避免创建一些控制相同属性的缓动,否则这些缓动效果间将出现冲 突
- 1 (全部): (这是默认值,除非 OverwriteManager.init() 被调用过)对于同一对象的所有缓动在创建时将会被完全的覆盖掉。
TweenLite.to(mc, 1, {x:100, y:200});
TweenLite.to(mc, 1, {x:300, delay:2}); //后创建的缓动将会覆盖掉先前创建的缓动,(可以起到这样的作用:缓动进行到一半时被中断,执行新的缓动 译者注)
- 2 (自动): (当 OverwriteManager.init() 被执行后,会根据具体的属性值进行选择)只覆盖对同一属性的缓动。
TweenLite.to(mc, 1, {x:100, y:200});
TweenLite.to(mc, 1, {x:300}); //only"x" 属性的缓动将被覆盖
- 3 (同时发生): 缓动开始时,覆盖全部的缓动。
TweenLite.to(mc, 1, {x:100, y:200});
TweenLite.to(mc, 1, {x:300, delay:2}); //不会覆盖先前的缓动,因为每二个缓动开始时,第一个缓动已经结束了。

举例:
将实例名为 "clip_mc" 的 MovieClip 透明度降到 50% (0.5) ,并将它 x 轴位置移动到 120 ,将音量将到 0,缓动总共用时 1.5 秒,代码如下:
import gs.TweenLite;
TweenLite.to(clip_mc, 1.5, {alpha:0.5, x:120, volume:0});

如果希望使用更高级的缓动函数在 5 内,将 alpha 变到 0.5,将 x 移动 到 120 ,使用 "easeOutBack" 弹性函数,缓动整体延迟 2 秒发生,并且在缓动结束时,执行 "onFinishTween" 函数,并且为这个函数传递几个参数,(一个数值 5 以及对 clip_mc 的引用),代码如下:
import gs.TweenLite;
import fl.motion.easing.Back;
TweenLite.to(clip_mc, 5, {alpha:0.5, x:120, ease:Back.easeOut, delay:2, onComplete: onFinishTween, onCompleteParams:[5, clip_mc]});
function onFinishTween(argument1:Number, argument2:MovieClip):void {
trace ("The tween has finished! argument1 = " + argument1 + ", and argument2 = " + argument2);
}

如果你的舞台上的 MovieClip 已经停在了它的结束位置,你只想让它花上5秒种回到这个位置,(只需要改变 y 属性,比当前位置高 100 像素的位置,让它从那里下落), 代码如下(这次使用的是 TweenLite.from 译者注):
import gs.TweenLite;
import fl.motion.easing.Elastic;
TweenLite.from(clip_mc, 5, {y:"-100", ease:Elastic.easeOut});

说明:
- TweenLite类会让你的 Flash 文件增加 3kb大小。
- 给参数值加上引号,表示对指定的属性进行相应操作。比如,使用 TweenLite.to(mc, 2, {x:"-20"}); 它将 mc.x 向左移动 20 像素,与此相同效果的代码是:TweenLite.to(mc, 2, {x:mc.x - 20});
- 你可以用别的缓动函数替换 TweenLite 默认的缓动函数: Regular.easeOut.
- 必须使用 Flash Player 9 或之后版本的播放器 (ActionScript 3.0)
- 可以对任何 MovieClip 使用 "volume" 缓动,就比如:TweenLite.to(myClip_mc, 1.5, {volume:0});
- 可以将 MovieClip 设定成某种颜色,使用 "tint" 参数,比如: TweenLite.to(myClip_mc, 1.5, {tint:0xFF0000});
- 想要对数组内容进行缓动,将数值放到一个叫 endArray 的数组中即可,例如:
var myArray:Array = [1,2,3,4];
TweenLite.to(myArray, 1.5, {endArray:[10,20,30,40]});
- 可以在任何时候终止缓动,使用 TweenLite.killTweensOf(myClip_mc); 函数。如果想强制终止缓动,可以传递一个 true 做为第二个参数,比如
TweenLite.killTweensOf(myClip_mc, true);
- 取掉延迟回调函数,用 TweenLite.killDelayedCallsTo(myFunction_func);这项功能可以用来控制回调函数的优先级。
- 使用 TweenLite.from() 方法,可以使用对象从别的位置回到当前的位置。例如,你可以将对象在舞台上摆放整齐(缓动结束时的位置),然后利用
缓动,让它们跑到那个位置上 去,你可以将缓动的初始位置值 x 或 y 或 alpha (或者其它你需要的属性)当做参数传递给这个方法函数。

TweenLite 下载链接:
http://www.greensock.com/ActionScript/TweenLiteAS3/TweenLiteAS3.zip
下 载下来的类包中,有一个 TweenLiteAS3_Sample_1.swf ,初学者可以用它来观察各种缓动的效果,并且直接得到相关的执行代码。算是一个可视化设计的工具,不要错过。
下载到类包以后,解压缩到一个目录比 如:d:/AS3Class ,在flash9 的首选参数->ActionScript->ActionScript3.0设置中添加类目录,d:/AS3Class /TweenLiteAS3 即可正确引用到相关的类。


应用举例:
import gs.TweenLite;
import gs.easing.*;

stage.addEventListener(MouseEvent.CLICK, onCK);
function onCK(evt) {
TweenLite.to(mc, 0.5, {x:mouseX, y:mouseY, rotation:360});
}
在舞台上点击,会让mc 元件旋转并跑动到鼠标位置

分享到:
评论

相关推荐

    AS3缓动类库下载

    AS3缓动类库是ActionScript 3编程中的一个重要工具,它主要被用于动画和特效的制作。在AS3中,缓动(Tweening)是一种技术,通过改变对象的属性值,如位置、大小、透明度等,在指定的时间内平滑地过渡,以创建出动态...

    英语语料库LOB语料库

    LOB语料库 创建时间: 1970年代初 创建单位:英国Lancaster大学和挪威Oslo大学以及Bergen大学 规模层级: 100万词次 基本情况:研究当代英国英语,与美国英语对比,使用了TAGIT系统,以...ween both varieties could be made

    frp_0.32.0_linux_386.tar.gz

    frp工具,进行内网穿透,具体使用,请参考https://blog.csdn.net/Hallo_ween/article/details/107013908

    晶闸管器件,全球前12强生产商排名及市场份额.pdf

    在全球市场中,STMicroelectronics、WeEn Semiconductors、Littelfuse、Renesas Electronics等是晶闸管器件的主要生产商,占据了相当大的市场份额。在产品类型上,单向晶闸管占据主导地位,而应用领域中,工业控制是...

    Perceptions of control over social outcomes and student behavior

    Perceptions of control over social outcomes and student behavior PERCEPTIONS OF CONTROL OVER SOCIAL OUTCOMES AND STUDENT BEHAVIOR’ ...orientation regarding social outcomes and t,wo ty

    对社会结果和学生行为的控制感

    Perceptions of control over social outcomes and student behavior PERCEPTIONS OF CONTROL OVER SOCIAL OUTCOMES AND STUDENT BEHAVIOR’ ...orientation regarding social outcomes and t,wo ty

    二极管,全球前40强生产商排名及市场份额.pdf

    此外,报告还提到了其他一些关键参与者,如Anova Technologies、Cree (Wolfspeed)、Comchip Technology、MACOM、INPAQ、Jiangsu Jiejie Microelectronics、Changzhou Galaxy、WeEn Semiconductors、Jilin Sino-...

    quizzify:用于传统测验(使用多项选择和真假问题类型)和基于用户选择的测验(例如“你是哪位美国总统?”)的测验生成器

    TBT-o-ween 你是什​​么感恩节菜? 和一个传统的测验,有正确和错误的答案 两个网站的故事——Florida CONNECT 与 Healthcare.gov 文档 步骤1 复制您想要的测验模板。 基于用户选择的测验模板 传统测验模板 ...

    韩国孩子们的大自然梦想网站模板

    3. "ween2.psd":这是一个Photoshop(PSD)文件,是设计源文件,很可能包含了网站模板的主要设计元素,如图片、图标或布局。用户可以编辑PSD文件来修改模板的设计。 4. "_desktop.ini":这是一个系统文件,通常用于...

    unity Shader 帮助手册

    3. Vertex Shader:处理顶点数据,如位置、法线和纹理坐标。 4. Fragment Shader:也称为像素着色器,处理每个像素的颜色。 二、Shader语言:CG/HLSL Unity中Shader主要使用基于Cg的HLSL语言编写。HLSL(High-Level...

    美丽的小女孩_韩国网页模板

    3. `ReadMe.txt`:这是一个常见的文本文件,通常包含使用模板时的重要说明、版权信息、技术支持联系方式等。在安装或使用模板时,阅读此文件是非常重要的。 4. `松设计漂亮的网页-mobanwang.com.url`:这是一个快捷...

    Itween插件用法与介绍(含代码)

    iTween.MoveTo(obj, Vector3(10, 10, 10), 2f).easeType(iTween.EaseType.easeInOutSine); ``` 五、Itween的优势 Itween的优势在于其简洁的API和丰富的功能。开发者可以通过简单的几行代码实现复杂的动画效果,同时...

    Unity3d从入门到精通

    Unity3D是一款强大的跨平台游戏开发引擎,被广泛应用于制作3D和2D游戏、模拟器、虚拟现实(VR)和增强现实(AR)应用。本教程“Unity3d从入门到精通”专为初学者设计,旨在帮助你快速掌握Unity3D的基本概念和操作,逐步...

    非常全的Unity常见开发脚本

    3. **常见开发脚本**:这些脚本可能涵盖游戏开发的各个方面,如UI交互(按钮点击事件、动画控制)、游戏逻辑(分数系统、生命值管理)、物理系统(碰撞、重力)、粒子效果(爆炸、火花)等。这些脚本是游戏开发中的...

    unity内置shader翻译

    3. **地形着色器(Terrain Shaders)**:Unity的地形系统提供了强大的地形编辑工具,而地形着色器则用于渲染这些复杂地形。它们通常包括对高度图的处理、多层纹理混合、草叶分布等功能。理解地形着色器的工作原理,...

    UGUI树状结构图插件

    一款unity树状结构图插件,分享给有需要的朋友 简单易用

    unity截屏代码

    unity截屏代码,直接用 全屏截图,自定义截图,相机截图 分享给有需要的朋友

Global site tag (gtag.js) - Google Analytics