AS3中的粒子

时间:2015-08-22 08:01:49

标签: actionscript-3 flash particles

我目前正在使用这个粒子系统,它运行正常。在交叉边界或小于0的α之后,粒子应该被破坏。但是有时当我使用这个代码时,它会失败并且粒子不能破坏。

function init():void
{
    particleArray = [];

    addEventListener(Event.ENTER_FRAME, onEnterFrameLoop);
    createParticle(s3.whell.x,s3.whell.y);
}

function onEnterFrameLoop(event:Event):void
{
    updateParticle();
}
/**
 * createParticle(target X position, target Y position)
 */
function createParticle(targetX:Number, targetY:Number):void
{
    //run for loop based on particleTotal
    for (var i:Number = 0; i < particleTotal; i++) 
    {
        var particle_mc:MovieClip = new Particle();

        //set position & rotation, alpha
        particle_mc.x = targetX
        particle_mc.y = targetY
        particle_mc.rotation = Math.random() * 360;
        particle_mc.alpha = Math.random() * 1.1;

        //set particle boundry            
        particle_mc.boundyLeft = targetX - particleRange;
        particle_mc.boundyTop = targetY - particleRange;
        particle_mc.boundyRight = targetX + particleRange;
        particle_mc.boundyBottom = targetY + particleRange;

        //set speed/direction of fragment
        particle_mc.speedX = Math.random() * particleMaxSpeed - Math.random() * particleMaxSpeed;
        particle_mc.speedY = Math.random() * particleMaxSpeed - Math.random() * particleMaxSpeed;
        particle_mc.speedX *= particleMaxSpeed
        particle_mc.speedY *= particleMaxSpeed

        //set fade out speed
        particle_mc.fadeSpeed = Math.random()*particleFadeSpeed;

        //just a visual particle counter
        particleCurrentAmount++;

        // add to array
        particleArray.push(particle_mc);

        // add to display list
        addChild(particle_mc);
    }
}

 function updateParticle():void
{
    for (var i = 0; i < particleArray.length; i++)
    {
        var tempParticle:MovieClip = particleArray[i];

        //update alpha, x, y
        tempParticle.alpha -= tempParticle.fadeSpeed;
        tempParticle.x += tempParticle.speedX;
        tempParticle.y += tempParticle.speedY;

        // if fragment is invisible remove it               
        if (tempParticle.alpha <= 0)
        {
            destroyParticle(tempParticle);
        }
        // if fragment is out of bounds, increase fade out speed
        else if (tempParticle.x < tempParticle.boundyLeft || 
                tempParticle.x > tempParticle.boundyRight || 
                tempParticle.y < tempParticle.boundyTop || 
                tempParticle.y > tempParticle.boundyBottom)
        {
            tempParticle.fadeSpeed += 8;
            destroyParticle(tempParticle);
        }
    }
}

 function destroyParticle(particle:MovieClip):void
{
    for (var i = 0; i < particleArray.length; i++)
    {
        var tempParticle:MovieClip = particleArray[i];
        if (tempParticle == particle)
        {
            particleCurrentAmount--;
            particleArray.splice(i,1);
            removeChild(tempParticle);
        }
    }
}

0 个答案:

没有答案
相关问题