我如何通过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
}
}
}
......但我想要做的事情的数学逃脱了我。任何帮助将不胜感激!
答案 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()});
}
}