1

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

任何帮助将不胜感激。谢谢

使用 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);
4

3 回答 3

4

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

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

简单的例子:

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 页面以获取带有示例的完整方法列表。

于 2013-04-11T00:31:25.257 回答
3

我建议不要使用来自 fl.transitions.Tween 的原生 Tween 类。它不是很好。行业标准是greensock 的 TweenMax

使用 TweenMax 很容易响应补间结束事件。您只需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};

希望有帮助。我希望你永远不必再使用那些原生补间类。他们是坑。

于 2013-04-10T16:37:43.293 回答
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,以便在程序运行时侦听器最初处于活动状态。

于 2013-04-10T18:44:56.730 回答