TweenMax 可能是很多人都用的,包括我 但 是最近發(fā)現(xiàn)大量的運用就總會產(chǎn)生這樣或那樣的"怪事",有時用代碼來做緩動有時又用TweenMax造成了代碼的 混亂,而且除了單調(diào)的TweenMax.to()等幾個函數(shù)外,貌似還有很多這樣那樣fun stuffs。對于動畫ease的控制,自己除了一個Back就不知道其他了。 總之一片慘淡, 所以趁著這個機會好好總結(jié)一下:
一,主要代碼結(jié)構(gòu):
com.greensock 包里面,首先最主要的就是TweenMax.as;然后一個常用的是 com.greensock.easing.*;里面包含了15個緩動,下文再一一介紹;另外一個是 com.greensock.events.TweenEvent,不過感覺不太常用;
每 一個TweenMax方法大多都會返回一個TweenMax的實例 -- 即下文所說的TweenMax Object。一個TweenMax需要三個參數(shù),即$target:Object, $duration:Number, $vars:Object,頭兩個即運動物體,時間,第三個參數(shù)保存了所有的參數(shù)。
二,TweenMax主類:
這里分幾個大塊來介紹,分別是:第三個參數(shù)特有屬性(29個),PlugIn(17個),公共屬性(10個),公共方法(20個)。
1,第三個參數(shù)特有屬性(29個):
這29個參數(shù)可以直接傳入第三個OBJECT參數(shù)中,不會增加文件的大小。
(1)delay : Number:延遲開始,在TweenMax動畫開始前延遲的秒數(shù)。
(2)useFrames : Boolean:當(dāng)設(shè)置為True時,對這個TweenMax Object的時間計算方式就是基于幀frame的。
(3)ease : Function:緩動方式??梢允褂胏om.greensock.easing包下的緩動函數(shù)。
(4)easeParams : Array:緩動函數(shù)參數(shù)。某些緩動函數(shù)需要傳入一些參數(shù)來進行額外的控制。
(5)onInit : Function:初始化函數(shù)。在TweenMax開始前,所有參數(shù)還沒被傳入TweenMax Object時觸發(fā)??梢杂脕沓跏蓟\動對象的狀態(tài)。
(6)onInitParams : Array:初始化函數(shù)參數(shù)。
(7)onStart : Function:開始函數(shù)。跟初始化函數(shù)不同,開始函數(shù)在TweenMax Object的值改變之后才觸發(fā),而且不同于初始化函數(shù)。開始函數(shù)可以被觸發(fā)多次。
(8)onStartParams : Array:開始函數(shù)參數(shù)。
(9)onUpdate : Function:更新函數(shù)。當(dāng)每次TweenMax Object數(shù)值更新的時候觸發(fā)。
(10)onUpdateParams : Array:更新函數(shù)參數(shù)。
(11)onComplete : Function:完成函數(shù)。當(dāng)TweenMax Object完成緩動后觸發(fā)。
(12)onCompleteParams :Array:完成函數(shù)參數(shù)。 {x:333,y:333,onComplete:onCompleteHander,onCompleteParam:["wn","334"]}
function onCompletHandler(value1:Object,value2:objet)
(13)onReverseComplete : Function:回放完成函數(shù)。當(dāng)TweenMax Object處于回放狀態(tài),并且回到起點時觸發(fā)。
(14)onReverseCompleteParams : Array:回放完成函數(shù)參數(shù)。
(15)onRepeat : Function:重放函數(shù)。當(dāng)TweenMax Object每次重放的時候觸發(fā)。
(16)onRepeatParams : Array:重放函數(shù)參數(shù)。
(17)immediateRender : Boolean:立即渲染。一般來說,TweenMax Object會在下一個渲染周期(也就是下一幀)被渲染到場景中。如果想強制立即渲染,可以把這個參數(shù)設(shè)為true。另外如果想阻止一個運動周期為0的運動物體被渲染,也可以把這個參數(shù)設(shè)為false。
(18)paused : Boolean:暫停。這個很好理解,設(shè)為true時TweenMax Object就會暫停緩動。
(19)reversed : Boolean:反轉(zhuǎn)。不知道為什么跟說明文檔里的不同。我的理解是將TweenMax Object的緩動反過來播放。
(20)overwrite : int:覆蓋處理。定義了當(dāng)對同一個物體使用TweenMax時發(fā)生沖突的處理方法。有6種模式。
模式0:NONE。不做任何處理。性能Excellent。
模式1:ALL_IMMEDIATE。設(shè)為該模式的TweenMax Object運動具有最高的優(yōu)先級,會覆蓋掉運動物體之前所有的緩動。新的TweenMax Object創(chuàng)建時覆蓋舊的TweenMax Object。性能Excellent。
模式2:AUTO。是TweenMax的默認模式(原來我之前的痛苦都是因為它···)。在新的TweenMax Object第一次渲染時覆蓋重復(fù)的屬性(模式1是覆蓋掉全部屬性)。只要不是具有太多的屬性需要覆蓋,性能還是不錯的。
模式3:CONCURRENT。這個單詞的意思是“同時發(fā)生”。跟模式1很相似。唯一的不同是他只覆蓋掉正在運行的TweenMax Object。而放過其他的沒有啟動的TweenMax Object。性能Very Good。
模式4:ALL_ONSTART。也是跟模式1非常像。兩點不同是他是在TweenMax Object第一次渲染時才覆蓋掉其他所有的TweenMax Object,而且這個會把在他之后創(chuàng)建的TweenMax Object也覆蓋掉。性能Very Good。
模式5:PREEXISTING。這個單詞一看上去很迷糊,其實是pre-existing,囧。唯一的不同是他是在TweenMax Object第一次渲染時才覆蓋掉其他所有的TweenMax Object。性能Very Good。
如果想改變?nèi)值腡weenMax Object默認overwrite屬性,可以調(diào)用哪個OverWriteManager類的全局方法init(),即:
OverwriteManager.init(OverwriteManager.XXXX);
(21)repeat : int:循環(huán)次數(shù)。設(shè)置為-1為無限循環(huán)。
(22)repeatDelay : Number:循環(huán)延遲的時間。
(23)yoyo : Boolean:YOYO球。另外一種循環(huán)的方式。像我們玩的YOYO球一樣,從頭到尾,再從尾到頭的往返運動。PS:要與repeat同時設(shè)置。
(24)onStartListener : Function:注冊一個TweenEvent的監(jiān)聽,跟開始函數(shù)在同一時刻派發(fā)。
(25)onUpdateListener : Function:注冊一個TweenEvent的監(jiān)聽,跟更新函數(shù)在同一時刻派發(fā)。
(26)onCompleteListener : Function:注冊一個TweenEvent的監(jiān)聽,跟完成函數(shù)在同一時刻派發(fā)。
(27)onReverseCompleteListener : Function:注冊一個TweenEvent的監(jiān)聽,跟回放完成函數(shù)在同一時刻派發(fā)。
(28)onRepeatListener : Function:注冊一個TweenEvent的監(jiān)聽,跟重放函數(shù)在同一時刻派發(fā)。
(29)startAt : Object:重設(shè)初始值。一般TweenMax Object使用運動物體的當(dāng)前狀態(tài)來做初始值。但是可以使用這個參數(shù)重新設(shè)置運動物體的初始狀態(tài)。
2,PlugIn(17個)
PlugIn 與"第三個參數(shù)特有屬性"其實是同一樣?xùn)|西。所不同的是他會顯著增加生成文件的大小。所有PlugIn 都關(guān)閉的情況下TweenMax的大小為8.8k(TweenLite為4k)。當(dāng)所有的PlugIn都使用后(包括收費的)TweenMax會膨脹到 25.9k。(話說回來怎么關(guān)閉我也不清楚,求指教)
這里介紹的是TweenMax文檔里提到的17個PlugIn(我看了包里面竟然有30個,囧···不管他)。
(1)autoAlpha : Number:跟alpha幾乎一樣,不同的是他在alpha==0時會自動將visible也設(shè)為false,而在alpha>0時將visible設(shè)為true。
(2)visible : Boolean:在TweenMax Object的最后設(shè)置物體的visible屬性。
(3)volume : Number:緩動音量的。需要運動物體有soundTransform屬性,例如MovieClip,SoundChannel,NetStream等。
(4)tint : Number:顏色。將整個運動物體變成對應(yīng)的顏色??梢允褂檬M制值。
(5)removeTint : Boolean:設(shè)為true時,去掉已經(jīng)使用的tint屬性。
(6)frame : Number:當(dāng)運動物體是MovieClip時,緩動內(nèi)部的時間軸。
(7)bezier : Array:貝塞爾曲線。這個有點不清楚,好像數(shù)組里的奇數(shù)個點(Object{x:xxx,y:xxx})為貝塞爾曲線的控制點,偶數(shù)個點為運動的終點。
(8)bezierThrough : Array:比貝塞爾曲線更直觀,數(shù)組里奇數(shù)的點為曲線中要穿過的點。
(9)orientToBezier :Array (or Boolean):指向運動。一個比較常用的功能是在進行曲線運動時,物體的朝向一般要對應(yīng)運動的方向(例如汽車之類的運動)。對于2D可以簡單的傳值 true。對于3D或者需要更多的靈活性,可以傳入數(shù)組4個參數(shù),x,y,rotation,需要增加的度數(shù),注:頭3個參數(shù)不是具體的數(shù)值,而是需要變化的參數(shù),頭兩個是位置屬性,第三個是旋轉(zhuǎn)參數(shù),第四個參數(shù)為可選。
(10)hexColors : Object:16 進制緩動。 TweenMax在對16進制數(shù)進行緩動時會有不平滑的現(xiàn)象出現(xiàn),這是就需要使用hexColors參數(shù)進行緩動。hexColors參數(shù)是一個對象,所 以需要把要進行緩動的參數(shù)傳入其中,即:TweenMax.to(target,2,{hexColors:{mcParas:newColor}});其中mcParas是target的屬性,newColor是要緩動到的新的16進值。
(11)shortRotation : Object:短旋轉(zhuǎn)。用這個代替rotation的話,TweenMax會自動按最短的旋轉(zhuǎn)方向來進行旋轉(zhuǎn),而不是按照AS3默認的以逆時針方向進行旋轉(zhuǎn)。記得要按Object的方式傳入。
(12)roundProps : Array:取整數(shù)。對于想要在變化中始終取整的值,可以把屬性的字符形式放到這個數(shù)組中。例:TweenMax.to(target,2,{x:200,y:200,roundProps:["x","y"]});
(13)blurFilter:Object:模糊濾鏡。用法:TweenMax.to(target,2,{blurFilter:{blurX:xxx,blurY:xxx}});
(14)glowFilter:Object:發(fā)光濾鏡。用法:TweenMax.to(target,2,{glowFilter:{color:0xFFFFFF,blurX:xxx,blurY:xxx}});
(15)colorMatrixFilter:Object:顏色矩陣濾鏡。用法:TweenMax.to(target,2,{colorMatrixFilter:{colorize:0xff0000, amount:1, contrast:1, saturation:1, hue:0}});
(16)dropShadowFilter:Object:投影濾鏡。用法:TweenMax.to(target,2,{dropShadowFilter:{color:0xff0000, alpha:1, blurX:12, blurY:12, distance:12}});
(17)bevelFilter:Object:斜角濾鏡。用法:TweenMax.to(target,2,{bevelFilter:{blurX:10, blurY:10, strength:1, distance:10}});
3,公共屬性
TweenMax有10個公共屬性。(啊···好簡短的介紹)
(1)動畫進度
currentProgress : Number
緩動動畫的進度,從0~1。
(2)動畫時間
currentTime : Number
與totalDuartion不同,currentTime只表示了一個TweenMax周期的時間。
(3)全局緩動速度倍數(shù)
globalTimeScale : Number
類似與按XX倍速播放緩動動畫,用法:TweenMax.globalTimeScale = XXX;
(4)取消作用在運動物體上的所有TweenMax動畫
killTweensOf : Function
這是一個對TweenLite中killTweensOf函數(shù)的引用,可以直接使用。
(5)重放次數(shù)
repeat : int
跟直接在TweenMax的構(gòu)造函數(shù)中傳入效果一樣。
(6)重放延遲時間
repeatDelay : Number
跟直接在TweenMax的構(gòu)造函數(shù)中傳入效果一樣。
(7)個體緩動速度倍數(shù)
timeScale : Number
與globalTimeScale用法一樣,只是這個是對單個TweenMax Object調(diào)用的。
(8)總緩動進度
totalProgress : Number
這個計算的是總的緩動時間,包含了重放和重放延遲的時間。從0~1。
(9)總緩動時間
totalDuration : Number
這個計算的是總的緩動時間,包含了重放和重放延遲的時間。
(10)yoyo
yoyo : Boolean
跟直接在TweenMax的構(gòu)造函數(shù)中傳入效果一樣。
4,公共方法(20個):
(1)構(gòu)造方法。
TweenMax(target:Object, duration:Number, vars:Object)
三個參數(shù)分別是運動物體,周期,參數(shù)。
(2)allTo(靜態(tài)方法)
allTo(targets:Array, duration:Number, vars:Object, stagger:Number = 0, onCompleteAll:Function = null, onCompleteAllParams:Array = null):Array
頭三個參數(shù)分別是:1個數(shù)組保存了多個要進行緩動的對象,周期,參數(shù);
后三個參數(shù)為可選,分別是:間隔時間,完成調(diào)用的函數(shù),函數(shù)參數(shù)。
返回的是一個數(shù)組保存了創(chuàng)建的所有TweenMax Object。
(3)allFromTo(靜態(tài)方法)
allFromTo(targets:Array, duration:Number, fromVars:Object, toVars:Object, stagger:Number = 0, onCompleteAll:Function = null, onCompleteAllParams:Array = null):Array
跟allTo一樣,只是多了一個參數(shù)對象可以用與定義起始狀態(tài)。
(4)allFrom(靜態(tài)方法)
allFrom(targets:Array, duration:Number, vars:Object, stagger:Number = 0, onCompleteAll:Function = null, onCompleteAllParams:Array = null):Array
跟allTo一樣,只是定義的是運動對象的初始狀態(tài),運動到當(dāng)前狀態(tài)。
(5)to(靜態(tài)方法)
to(target:Object, duration:Number, vars:Object):TweenMax
是allTo的簡化版,也是很多人用TweenMax的主要目的,定義了運動物體,周期,和參數(shù)。返回一個TweenMax Object。
(6)fromTo(靜態(tài)方法)
fromTo(target:Object, duration:Number, fromVars:Object, toVars:Object):TweenMax
與to一樣,不過多了一個參數(shù)定義運動物體的初始狀態(tài)。
(7)from(靜態(tài)方法)
from(target:Object, duration:Number, vars:Object):TweenMax
跟to一樣,只是定義的是運動對象的初始狀態(tài),運動到當(dāng)前狀態(tài)。
(8)強制完成
complete(skipRender:Boolean = false, suppressEvents:Boolean = false):void
強制TweenMax到最后結(jié)束部分。如果第一個參數(shù)設(shè)為true,則不會渲染,TweenMax將停在調(diào)用那一刻。如果第二個參數(shù)設(shè)為true則不會觸發(fā)onCompelte,onUpdate等事件。
(9)延遲執(zhí)行函數(shù)
delayedCall(delay:Number, onComplete:Function, onCompleteParams:Array = null, useFrames:Boolean = false):TweenMax
跟AS3自帶的setTimeout幾乎一樣,是他們的AS3版。
(10)返回正在運行的的所有TweenMax Object(靜態(tài)方法)
getAllTweens():Array
如題。
(11)返回運動物體正在運行的的TweenMax Object(靜態(tài)方法)
getTweensOf(target:Object):Array
如題。
(12)清除初始值
invalidate():void
當(dāng)從新播放一段TweenMax Object時(即調(diào)用restart()方法),如果想從新設(shè)置新的初始值,可以調(diào)用此方法清空原有初始值。調(diào)用后此TweenMax Object會將當(dāng)前位置作為新的初始值。
(13)判斷是否正在緩動(靜態(tài)方法)
isTweening(target:Object):Boolean
正在緩動返回true,否則false。
(14)清除所有TweenMax Object(靜態(tài)方法)
killAll(complete:Boolean = false, tweens:Boolean = true, delayedCalls:Boolean = true):void
三個參數(shù),第一個設(shè)為true可以強制先完成再清除,第二個是清除所有的緩動,第三個是清除所有的函數(shù)延遲執(zhí)行。
(15)清除所有子對象的TweenMax Object(靜態(tài)方法)
killChildTweensOf(parentisplayObjectContainer, complete:Boolean = false):void
將一個DisplayObjectContainer的所有子對象的TweenMax Object??梢赃x擇先強制完成。
(16)清除某個屬性的緩動
killProperties(names:Array):void
傳入的是一個數(shù)組,以字符串的形式。例:_tweenMax.killProperties(["x"]);
(17)全部暫停(靜態(tài)方法)
pauseAll(tweens:Boolean = true, delayedCalls:Boolean = true):void
全部暫停TweenMax Object(可選),函數(shù)延遲執(zhí)行(可選)。
(18)全部恢復(fù)(靜態(tài)方法)
全部恢復(fù)TweenMax Object(可選),函數(shù)延遲執(zhí)行(可選)。
(19)重定向終點
setDestination(property:String, value:*, adjustStartValues:Boolen = true):void
第一個參數(shù)是對應(yīng)的屬性值,第二個是要設(shè)置的新值,第三個參數(shù)是是否要對應(yīng)調(diào)整起點,讓轉(zhuǎn)變看起來沒那么 skipping/jerking(意會吧,突兀?),就是要注意如果是要反播緩動動畫的話可能會無法重定向到起點。一般不建議和updateTo一起用。
(20)重定向?qū)傩?/p>
updateTo(vars:Object, resetDuration:Boolean = false):void
可以在運行中新增或改變原有的屬性變化值。第二個參數(shù)設(shè)為false時將不重播緩動,而繼續(xù)緩動到新的值;設(shè)為true將中斷并重播緩動。
最 后一節(jié),我們談?wù)凾weenMax的緩動效果。TweenMax的緩動效果包是com.greensock.easing.*;其中里面有16個類。按照 每個類都有的easeIn,easeOut,easeInOut,3種模式的話,就總共有48種變化了(猜想,應(yīng)該是左右)。下面來一樣一樣介紹:
三,總結(jié):
TweenMax的功能很多,而且處于不斷更新完善中。這次介紹了絕大部分常用的功能,其中可能會有錯漏的地方,希望有發(fā)現(xiàn)的及時跟我聯(lián)系,幫助我也糾正錯誤。 :)
而且他現(xiàn)在好像發(fā)展到什么Tween Platform了。還有什么TweenLoader,TimeLineMax,TimeLineLite等等.