Actionscript 3 雪花落在计时器上-动作脚本3
我有下面的下雪代码,我只想在一定时间内下雪,然后停止下雪。有什么建议吗?我曾尝试将整个过程包装在一个计时器函数中,然后从计时器调用该函数,但它会产生错误Actionscript 3 雪花落在计时器上-动作脚本3,actionscript-3,timer,Actionscript 3,Timer,我有下面的下雪代码,我只想在一定时间内下雪,然后停止下雪。有什么建议吗?我曾尝试将整个过程包装在一个计时器函数中,然后从计时器调用该函数,但它会产生错误 var snowflakes:Array = new Array(); var snowflakeProps:Dictionary= new Dictionary(true); var max_snowsize:Number = .04; // pixels var snowflakesCnt:Number = 150; var oheight
var snowflakes:Array = new Array();
var snowflakeProps:Dictionary= new Dictionary(true);
var max_snowsize:Number = .04;
// pixels
var snowflakesCnt:Number = 150;
var oheight:Number;
var owidth:Number;
init();
function init():void {
owidth = width;
oheight = height;
// quantity
for (var i:int=0; i<snowflakesCnt; i++) {
var t:MovieClip = new SnowFlake();//
t.name = "snowflake"+i;
t.alpha = 20+Math.random()*60;
t.x = -(owidth/2)+Math.random()*(1.5*owidth);
t.y = -(oheight/2)+Math.random()*(1.5*oheight);
t.scaleX = t.scaleY=.5+Math.random()*(max_snowsize*10);
var o:Object = new Object();
o.k = 1+Math.random()*2;
o.wind = -1.5+Math.random()*(1.4*3);
snowflakeProps[t] = o;
addChild(t);
snowflakes.push(t);
}
addEventListener(Event.ENTER_FRAME, snowFlakeMover);
}
function shakeUp():void{
for (var i:int=0; i<snowflakes.length; i++) {
var t:MovieClip = snowflakes[i] as MovieClip;
t.x = -(owidth/2)+Math.random()*(1.5*owidth);
t.y = -(oheight/2)+Math.random()*(1.5*oheight);
}
}
function snowFlakeMover(evt:Event):void {
var dO:MovieClip;
var o :Object;
if(visible && parent.visible){
for (var i:int = 0; i < snowflakes.length; i++) {
dO = snowflakes[i] as MovieClip;
o = snowflakeProps[dO];
dO.y += o.k;
dO.x += o.wind;
if (dO.y>oheight+10) {
dO.y = -20;
}
if (dO.x>owidth+20) {
dO.x = -(owidth/2)+Math.random()*(1.5*owidth);
dO.y = -20;
} else if (dO.x<-20) {
dO.x= -(owidth/2)+Math.random()*(1.5*owidth);
dO.y = -20;
}
}
}
}
var雪花:数组=新数组();
var雪花道具:Dictionary=newdictionary(true);
var max_snowsize:Number=.04;
//像素
var雪花Cnt:数量=150;
var oheight:数字;
var owidth:数字;
init();
函数init():void{
owidth=宽度;
oheight=高度;
//数量
对于(变量i:int=0;iowidth+20){
dO.x=-(owidth/2)+Math.random()*(1.5*owidth);
dO.y=-20;
}else if(dO.x这里有一个简单的方法来停止移动并移除显示器上的所有雪花:
var stopTime:Number = 7; // number of seconds to wait before stopping
var stopTimer:Timer = new Timer(stopTime * 1000, 1);
stopTimer.addEventListener(TimerEvent.TIMER_COMPLETE, onStopTimerComplete);
stopTimer.start();
function onStopTimerComplete(e:TimerEvent):void
{
for each(var snowflake:MovieClip in snowflakes)
{
TweenLite.to(snowflake, 4, {alpha:0, delay:Math.random()*3, onComplete:removeSnowflake, onCompleteParams:[snowflake]});
}
}
function removeSnowflake(snowflake:MovieClip):void
{
if(snowflake.parent)
{
// remove the snowflake from the display list
snowflake.parent.removeChild(snowflake);
}
// delete the properties
delete snowflakeProps[snowflake];
// remove the snowflake from your array
snowflakes.splice(snowflakes.indexOf(snowflake),1);
// if there are no more snowflakes in the array, stop moving them
if(!snowflakes.length)
{
removeEventListener(Event.ENTER_FRAME, snowFlakeMover);
}
}
确实非常好-这正是我想要的。是的,让它们在下落时消失会很好,我尝试添加以下行:TweenLite.to(snowflake,4,{alpha:0,delay:3});而不是删除,但它没有产生那种效果。如果您愿意,请随意分享更精细的方法。非常感谢您的时间。我编辑了代码以使雪花淡出。在所有雪花淡出之前,ENTER\u FRAME
侦听器不会被删除。您还可以查看粒子生成器l图书馆就像燧石粒子,虽然需要一点时间来学习,但是结果会非常壮观。谢谢分享,这很好。