1

我是游戏开发的新手,现在我正在使用射击游戏来学习。我有个问题,

在我的游戏中,我创建了三个补间动画:

var myTween:Tween = new Tween(this, "scaleX", Back.easeIn, 1.2, 0, 10);
var myTween2:Tween = new Tween(this, "scaleY", Back.easeIn, 1.2, 0, 10);
var myTween3:Tween = new Tween(this, "alpha", None.easeIn, 1, 0, 10);

这个补间将在敌人的生命值变为零后发生,我的意图是在动画之后,剪辑将从舞台上移除。

我的问题是,有没有办法知道所有这些补间已经完成?我尝试为每个 tween 应用 TweenEvent.MOTION_FINISH 事件,但如果我这样做,我必须创建三个 listeners(如果我想创建十个 tween,这将是有问题的)。

谢谢

4

2 回答 2

0

Greensock 的 TweenLite 和 TimelineLite 为 +1。

使补间变得更干净、更容易。

于 2014-10-20T21:11:25.747 回答
0

由于所有补间都运行相同的持续时间,您是否可以不只是将您的侦听器添加到最后一个补间,并且当处理程序执行时您会知道它们都已完成?

或者,您可以执行以下操作:

import fl.transitions.Tween;
import fl.transitions.TweenEvent;
import fl.motion.easing.Back;
import fl.transitions.easing.None;

// Populate an array with the tweens
var tweens:Array = [];
tweens.push(new Tween(this, "scaleX", Back.easeIn, 1.2, 0, 10));
tweens.push(new Tween(this, "scaleY", Back.easeIn, 1.2, 0, 10));
tweens.push(new Tween(this, "alpha", None.easeIn, 1, 0, 10));

// Finished tweens count
var finishedCount:int = 0;

// Loop through all the tweens and add a handler for the motion finished event
for (var i:int = 0; i < tweens.length; i ++)
{
    // Each of the tweens motion finished event can be assigned to the same handler
    Tween(tweens[i]).addEventListener(TweenEvent.MOTION_FINISH, motionFinishedHandler);
}

function motionFinishedHandler(e:TweenEvent):void
{
    // Good practice to remove the event listener when it is no longer needed
    e.target.removeEventListener(TweenEvent.MOTION_FINISH, motionFinishedHandler);

    // Increment the count and test whether it equals the number of tweens
    if (++ finishedCount == tweens.length)
        trace("Finished");
}

您可能还想考虑Greensock 的 TweenLite,它几乎是 Flash 中动画对象的标准,它允许您在一次调用中对同一对象的多个属性进行补间。

于 2012-06-17T22:56:01.130 回答