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图书馆就像燧石粒子,虽然需要一点时间来学习,但是结果会非常壮观。谢谢分享,这很好。