0

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

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;
        }
    }
}

我将不胜感激任何帮助或见解!

4

3 回答 3

0

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

于 2013-07-23T08:20:26.873 回答
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);

}
于 2013-07-23T00:37:56.853 回答
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 中探索 Tween 的世界,我强烈建议您查看Tween Lite / Tween Max库。

于 2013-07-22T23:45:21.833 回答