AS3 / CS6:动画片段的补间数组:除1之外它们都停止

时间:2013-07-22 22:30:02

标签: arrays actionscript-3 tween

嘿所以我正在尝试将补间应用于数组中的每个项目(这只是一个实验......我正在尝试更多地了解补间)。这是我的代码:

import flash.events.Event
import fl.transitions.TweenEvent
import flash.events.MouseEvent;
import flash.utils.Dictionary;
import flash.display.MovieClip;
import fl.transitions.Tween;
import fl.transitions.easing.*;
import fl.motion.Color; 

var bubbles:Array = [];
var numBubbles:int=55;

for (var i:Number=0; i<=numBubbles-1;i++){
    bubbles.push(new bubble());
    stage.addChild(bubbles[i]);
    startMotion(bubbles[i]);
}

function startMotion( TheBubble:bubble ){
    var tweenY:Tween = new Tween(TheBubble, "y", Regular.easeIn, TheBubble.y, -5, 3, true);
}

我所拥有的是大部分时间,补间开始播放但是除了其中一个气泡之外所有的补间都停止了。

有时他们完成并且当numBubbles设置为5到10之类的低数字时更有可能完成。这可能是补间限制问题吗?我没想到这很可能。

持续前进的泡沫不是阵列的第一个泡沫,也不是最后一个泡泡。我仍然试图缩小它是哪一个,但我通过着色第一个和最后一个来计算。 编辑:似乎(有点)随机。有时候有色的人会这样做 - 大部分时间它都是其中之一。

哦,这是泡泡课:

package{
    import flash.display.MovieClip;
    import flash.events.Event;
    import fl.transitions.Tween;
    import fl.transitions.easing.*;

    public class bubble extends MovieClip{
        var bubbleSize:int;
        public function bubble(){
            this.bubbleSize=Math.ceil(Math.random()*15)+15;
            this.width=bubbleSize;
            this.height=bubbleSize;
            this.x = Math.random()*(550-bubbleSize);
            this.y = 400+Math.random()*400;
        }
    }
}

我很感激任何帮助或见解!

3 个答案:

答案 0 :(得分:0)

也许存在竞争条件,尝试在之后设置动画肯定已添加到舞台中:

...
for (var i:Number=0; i<=numBubbles-1;i++){
    bubbles.push(new bubble());
    bubbles[i].addEventListener(Event.ADDED_TO_STAGE, startMotion);
    stage.addChild(bubbles[i]);
}

function startMotion( evt:Event ){
    var TheBubble:bubble = bubble(evt.target);
    var tweenY:Tween = new Tween(TheBubble, "y", Regular.easeIn, TheBubble.y, -5, 3, true);
}

此外,由于您正在使用Flash浏览Tweens世界,因此我强烈建议您查看Tween Lite / Tween Max库。

答案 1 :(得分:0)

Adob​​e论坛上有人解决了这个问题:http://forums.adobe.com/thread/1260275

我们应该使用此代码:

import flash.events.Event

import fl.transitions.TweenEvent

import flash.events.MouseEvent;

import flash.utils.Dictionary;

import flash.display.MovieClip;

import fl.transitions.Tween;

import fl.transitions.easing.*;

import fl.motion.Color;



var bubbles:Array = [ ];

var numBubbles:int=55;

var tweenY:Tween;

var tweenA:Array = [];



for (var i:Number=0; i<=numBubbles-1;i++){

    bubbles.push(new bubble());

    stage.addChild(bubbles[i]);

    startMotion(bubbles[i]);

}



function startMotion( TheBubble:bubble ){

    tweenY = new Tween(TheBubble, "y", Regular.easeIn, TheBubble.y, -5, 3, true);

tweenA.push(tweenY);

}

答案 2 :(得分:0)

如果您的主要代码位于时间轴框架中而不是.as文件中,则可能会被循环“播放头”反复触发。尽早添加'stop()'可能会解决问题(?)
要么将Flash文件链接到外部Document.as类,要么将主代码放在那里。