补间动作3

时间:2013-04-10 16:25:09

标签: actionscript-3

我一直在研究这个问题。在这种情况下,我有一个名为“mcBall”的movieClip。我用补间设置了两个按钮“btnLeft”和“btnRight”,这样mcBall可以平滑地缓解两点之间的关系。    工作正常,但如果它变得有毛病,那么两个按钮仍处于活动状态,如果用户点击任一按钮,当然球会像预期的那样回到起点。    我的问题是这个......当“mcBall”对象移动时,按钮被取消激活的最佳方法是什么。是否最好为按钮使用removeEventListener,然后再次添加它。使用像“If(mcBall.x => = 81 ||< = 469)removeEventListener”这样的if语句会更好吗?也许使用tweenEvent.MOTION_FINISH再次设置eventListener。

非常感谢任何帮助。感谢

使用Flash cs3

在这段代码中,我设法关闭了一个按钮,这样当球移动时它仍保持不活动状态,但另一个仍处于活动状态。我不确定removeEventListener的位置。

import fl.transitions.Tween;
import fl.transitions.easing.*;

function moveBallRight(evt:MouseEvent):void {
    var moveBall:Tween=new Tween(mcBall,"x",Regular.easeOut,80,470,4,true);
    btnRight.removeEventListener(MouseEvent.CLICK,moveBallRight);
    btnLeft.addEventListener(MouseEvent.CLICK,moveBallLeft);

}
btnRight.addEventListener(MouseEvent.CLICK,moveBallRight);


function moveBallLeft(evt:MouseEvent) {
    var moveBall:Tween=new Tween(mcBall,"x",Regular.easeOut,470,80,4,true);
    btnRight.addEventListener(MouseEvent.CLICK,moveBallRight);
    btnLeft.removeEventListener(MouseEvent.CLICK,moveBallLeft);


}

btnLeft.addEventListener(MouseEvent.CLICK,moveBallLeft);

3 个答案:

答案 0 :(得分:4)

就个人而言,我建议使用Actuate补间库。与TweenLite / Max不同,它是完全开源的,具有大部分功能,而且速度更快,没有专业/付费版本。

我也喜欢Actuate的界面比TweenLite好得多。它非常相似,人们很容易开始使用它,但我喜欢以更明确的方式添加补间修饰符。

简单示例:

Actuate.tween(mySprite, 1, { alpha:1 });

那么你想要指定一个缓和方程,只需将其链接在最后:

Actuate.tween(mySprite, 1, { alpha:1 }).ease(Quad.easeOut);

还想延迟吗?将其添加到链中:

Actuate.tween(mySprite, 1, { alpha:1 }).delay(1).ease(Quad.easeOut);

当然你也可以调用onComplete函数,即使是参数:

Actuate.tween(mySprite, 1, { alpha:1 }).onComplete(trace, 'Tween finished');

查看上面链接的Actuate Google Code页面,了解包含示例的方法的完整列表。

答案 1 :(得分:3)

我建议不要使用fl.transitions.Tween中的本机Tween类。它不是很好。行业标准是TweenMax from greensock

使用TweenMax可以轻松地响应最终的tween事件。您只需在补间中添加onComplete:myhandlerfunction即可。 上面代码中的示例如下所示: 而不是

 var moveBall:Tween=new Tween(mcBall,"x",Regular.easeOut,80,470,4,true);

你会:

TweenMax.to(mcBall, 4, {x:470, ease:Expo.easeOut, onComplete:onBallMovedLeftComplete};

希望有所帮助。我希望你再也不必使用那些本机补间类了。他们是维修站。

答案 2 :(得分:0)

我同意您应该使用TweenLite或TweenMax,正如其他答案所示。

从我收集的内容来看,问题是激活/停用按钮事件监听器的最佳方法。

我想说最好的方法是有一个添加按钮监听器的功能和另一个用于删除它们的功能。

然后,每当调用补间时,首先在执行补间之前调用删除函数。

完成后,您调用该函数再次添加它们。您可以将onComplete参数与Tweenlite一起使用,以指定添加按钮侦听器的功能。

例如:

function moveBallRight(evt:MouseEvent):void
{
    removeButtonListeners();
    TweenLite.to(mcBall, 4, {x:470, ease:Expo.easeOut, onComplete:addButtonListeners};
}

function moveBallLeft(evt:MouseEvent):void
{
    removeButtonListeners();
    // do your tween
    TweenLite.to(mcBall, 4, {x:80, ease:Expo.easeOut, onComplete:addButtonListeners};
}

function addButtonListeners():void
{
   // add both listeners here
}

function removebuttonListeners():void
{
  // remove both listeners here
}

此外,您显然也希望在程序开头调用addButtonListeners,以便在程序运行时监听器最初处于活动状态。