Flash Actionscript 3&摆动对象Alpha动画

时间:2009-04-09 15:34:58

标签: flash actionscript-3 animation

我如何通过Flash中的Actionscript进行动画制作,如下所示?:

我的舞台上散布着几个随机Alpha值的正方形。当电影加载时,我希望每个方格能够平滑地动画到它们当前的alpha值为零,然后为1,并且无限期地重复该循环。

作为奖励,我希望在继续循环之前,能够让每个方块在alpha = 1的时间段内停留。

我从在线教程中收集到了我应该将我的方块(ImageTile)设置为对象:

package {

    import flash.display.*;
    import flash.events.*;

    public class ImageTile extends MovieClip {

        var tileAlpha = this.alpha;

        public function ImageTile() {
            // construct here
            this.addEventListener(Event.ENTER_FRAME, AnimateTile);
        }

        function AnimateTile(e:Event) {
            // animation to go here
        }

    }

}

......但我想要做的事情的数学逃脱了我。任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:1)

可能是Dissolve效果或Fade(两者都带有页面底部的示例和代码)。我相信你会希望这些效果按顺序播放(可能没有必要在ActionScript中编码)。然后为了让它保持在alpha = 1,我会在效果中添加一个事件并检查其alpha值并设置延迟或暂时暂停动画。我运行了一个简单的测试,只是动画阿尔法值,它似乎工作。

您可以将repeatCount设置为0以无限期地播放效果,并将repeatDelay设置为保持最终的alpha值(然后您可能不必添加任何其他事件处理程序)。

var eff : Dissolve = new Dissolve();
eff.alphaFrom = ...;
eff.alphaTo = 0;
// set repeatCount & repeatDelay if necessary
eff.play([list of targets]);

答案 1 :(得分:0)

好的,所以我设法用两个计时器大致计算出我想要的东西:

package {

import flash.display.MovieClip;
import flash.events.*;
import gs.TweenLite;
import fl.motion.easing.*;
import flash.utils.Timer;

public class ImageTile extends MovieClip {      

    public function ImageTile() {
        var atimer:Timer = new Timer(Math.floor(Math.random()*20*1000),1);
        atimer.addEventListener(TimerEvent.TIMER, initSquares);
        atimer.start();
    }

    function initSquares(e:Event) {
        //trace("should be 15 of these, no more!");
        var timer:Timer = new Timer(10000);
        timer.addEventListener(TimerEvent.TIMER, fade);
        timer.start();
    }

    function fade(e:Event) {
        TweenLite.to(this, 2, {alpha:Math.random()});
    }

}

}

基本上,我的主要要求是每个方格做一个淡入淡出的动画,其间有固定的间隔,并且它们都不会在相同的间隔内完成。我确信这不是那么干净,所以任何重新分解都会受到赞赏。

我还会注意到我正在使用TweenLite库进行淡入淡出。

答案 2 :(得分:0)

你可能可以摆脱计时器,但老实说,它不会改变太多。

import fl.motion.easing.*;

import flash.display.MovieClip;
import flash.events.*;
import flash.utils.Timer;
import flash.utils.setInterval;
import flash.utils.setTimeout;

public class ImageTile extends MovieClip {              

    public function ImageTile() 
    {
        flash.utils.setTimeout(initSquares, Math.floor(Math.random()*20*1000);
    }

    function initSquares() 
    {
            flash.utils.setInterval(fade, 10000);
    }

    function fade() 
    {
            TweenLite.to(this, 2, {alpha:Math.random()});
    }

}