2011-10-03 86 views
1

只是好奇。 TweenLite/TweenMax是一个非常常见的动画库,我想知道如何分类TweenLite中使用的设计模式。 对于那些你不熟悉,这里是从他们的网站一些示例代码:TweenLite设计模式

//import the GreenSock classes 
import com.greensock.*; 
import com.greensock.easing.*; 

//tween the MovieClip named "mc" to an alpha of 0.5 over the course of 3 seconds 
TweenLite.to(mc, 3, {alpha:0.5}); 

//scale myButton to 150% (scaleX/scaleY of 1.5) using the Elastic.easeOut ease for 2  seconds 
TweenLite.to(myButton, 2, {scaleX:1.5, scaleY:1.5, ease:Elastic.easeOut}); 

//tween mc3 in FROM 100 pixels above wherever it is now, and an alpha of 0. (notice the vars object defines the starting values instead of the ending values) 
TweenLite.from(mc3, 1, {y:"-100", alpha:0}); 

//after a delay of 3 seconds, tween mc for 5 seconds, sliding it across the screen by changing its "x" property to 300, using the Back.easeOut ease to make it shoot past it and come back, and then call the onFinishTween() function, passing two parameters: 5 and mc 
TweenLite.to(mc, 5, {delay:3, x:300, ease:Back.easeOut, onComplete:onFinishTween, onCompleteParams:[5, mc]}); 
function onFinishTween(param1:Number, param2:MovieClip):void { 
trace("The tween has finished! param1 = " + param1 + ", and param2 = " + param2); 
} 

//call myFunction() after 2 seconds, passing 1 parameter: "myParam" 
TweenLite.delayedCall(2, myFunction, ["myParam"]); 

//use the object-oriented syntax to create a TweenLite instance and store it so we can reverse, restart, or pause it later. 
var myTween:TweenLite = new TweenLite(mc2, 3, {y:200, alpha:0.5, onComplete:myFunction}); 

//some time later (maybe in by a ROLL_OUT event handler for a button), reverse the tween, causing it to go backwards to its beginning from wherever it is now. 
myTween.reverse(); 

//pause the tween 
myTween.pause(); 

//restart the tween 
myTween.restart(); 

//make the tween jump to exactly its 2-second point 
myTween.currentTime = 2; 

回答

0

当他们绕过关联数组而不是调用实际的功能,它是一个神奇的容器反模式:http://c2.com/cgi/wiki?MagicContainer。这被认为是一个坏主意,因为你真的应该调用特定的功能而不是构建疯狂的参数。

+0

而且,TweenLite仍然很受欢迎并且被广泛使用。看来,下面的设计模式并不总是需要成功的软件,我想。 –

+0

@LarsBlåsjö,是的......虽然使用该模式的一部分是试图绕过语言的限制,所以我不会责怪他们太多。 –

+0

@LarsBlåsjö,tweenlite是这样设计的,因为flash中的对象是动态的,并且它不直接针对displayobjects,你可以在任何对象上使用tweenlite并通过一定数量的帧或时间插入对象的任何属性。真的,我可以看到的唯一的消极因素是预留关键字冲突的可能性较高,并且效率有所降低(尽管Tweenlite的运行速度比大多数补间引擎快)。我问这个问题是因为我真的很喜欢它的设计! – K2xL