2010-02-22 67 views
1

我有一个代码绿色代码的等价AS3代码?

var timeline:TimelineLite=new TimelineLite ; 
timeline.append(new TweenLite(MyClip,1,{y:367,ease:Expo.easeOut})); 

我需要在动作脚本对应的代码3.

编辑:我怎么能执行这个动画使用了使用GreenSock插件的功能呢? 这里“TimelineLite”是一个类,“append”是成员函数,所以用这个我怎么做动画。

+0

嘿,你应该回去,并回答你的问题接受! – grapefrukt

+0

试图在不使用TweenLite的情况下重写它是非常复杂的。你必须创建一个定时器,创建缓动功能,并做一堆东西来播放/停止/倒带。我建议你只使用TweenLite,它可以为你节省大量时间,让生活更有趣。 –

+0

为什么你想在没有图书馆的情况下做到这一点?它是大小? – back2dos

回答

0

您发布的代码,只要我可以告诉(不知道为TweenLite的的API)完全有效的ActionScript 3的

+0

:)哎呀,请检查问题的编辑部分。 :) – coderex

2

你到底想要什么,没有插件?

MyClip.addEventListener(Event.ENTER_FRAME, onEnterFrame); 

var time:Number = 0; 
var deltaTime:Number = 1/stage.frameRate; 
var initY:Number = MyClip.y 
var deltaY:Number = 367 - initY; 
function onEnterFrame(event:Event):void 
{ 
    time += deltaTime; 

    if (t >= 1) 
    { 
     MyClip.removeEventListener(Event.ENTER_FRAME, onEnterFrame); 
     MyClip.y = 367; 
    } 
    else 
    { 
     MyClip.y = deltaY * (-Math.pow(2, -10 * time) + 1) + initY; 
    } 
} 

我想,虽然我没有测试过它。

缓解从robertpenner.com方程,尽管mighy是可优化的

使用输入帧可能不是最佳的,见my blog post上代号为更多的信息。

真的,你应该使用补间库。它们是由聪明的人组成的,他们希望从性能繁重的操作中挤出每盎司的性能。您也可以考虑查看Grant Skinner's GTween,因为它的许可限制比TweenLite/TweenMax更少。

1

您无法使用基本AS3功能复制此内容。 Greensock的补间库增加了一些功能,它允许您将很多补间组合成一个时间线,以便补间顺序运行。如果您想要复制它,则必须为每个要补间的项目创建补间,并在每个补间之后使用TweenEvent.MOTION_FINISHED事件来启动下一补间。

1

编辑:更新了代码,以便它创建一个假时间轴。此代码基于alecmce答案。只是增加了Tweens排序的可能性。由于您的问题是关于如何在没有类的情况下复制类成员,因此使用动态actionscrip可以在对象内伪类编写类,并在调用函数时为您提供相同的语法。换言之:这样做的唯一建议是给你相同的语法。删除timeline对象可以实现相同的功能。

2个测序twens例如:使用动态动作

// updated code  
var timeline:Object = new Object(); 
timeline.memory = new Array(); 

timeline.append = function (tween_obj:MovieClip, toY:Number){ 
    this.memory.push ([tween_obj, toY]); 
}; 

timeline.checkTimeline = function(){ 

    if (this.memory[0] != null) { 
     this.TweenFeather(MovieClip(this.memory[0][0])); 
    } 
}; 

timeline.startAnimation = function() { 
    this.checkTimeline(); 
}; 

timeline.TweenFeather = function TweenFeather(_do:MovieClip):void 
{ 
    _do.addEventListener(Event.ENTER_FRAME, _onEnterFrame); 

    var time:Number = 0; 
    var deltaTime:Number = 1/stage.frameRate; 
    var initY:Number = _do.y; 
    var deltaY:Number = this.memory[0][1] - initY; 
    function _onEnterFrame(event:Event):void 
    { 
     time += deltaTime; 

     if (time >= 1) 
     { 
      _do.removeEventListener(Event.ENTER_FRAME, _onEnterFrame); 
      _do.y = timeline.memory[0][1]; 

      timeline.memory.shift(); 
      timeline.checkTimeline(); 
     } 
     else 
     { 
      _do.y = deltaY * (-Math.pow(2, -10 * time) + 1) + initY; 
     } 
    } 
} 

timeline.append(MyClip, 367); 
timeline.append(MyClip2, 200); 

timeline.startAnimation(); 

你失去一切:

timeline.append(MyClip, 367); 
timeline.append(MyClip2, 200); 

timeline.startAnimation(); 

(见下面的更新代码)


我10分钟笨拙的方法as3的好东西,不知道你是如何限制k的。 G运气

+0

为什么你会这样做?我的方法有什么优势?无类型的对象,匿名函数,额外的变量,额外的方法调用都会增加应用程序的权重并减慢速度。它看起来像你采取我的方法,并使其更慢? – alecmce

+0

完全开放,我只是把你的代码,并做了一个伪时间线。认为这很明显,因为我没有改变你的代码名称变量中的任何东西。但是如果你花一些时间阅读这个问题,你会发现有一点比补间更好。需要时间表。我笨拙的代码(正如我之前所说的)只是你如何做到这一点的草图。在startAnimation中添加更多功能后,您可以轻松地对每个与其他人的补间关系进行更多控制。我是我错了吗? –