Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 如何阻止粒子移出舞台,Actionscript随机粒子生成器_Actionscript 3_Flash - Fatal编程技术网

Actionscript 3 如何阻止粒子移出舞台,Actionscript随机粒子生成器

Actionscript 3 如何阻止粒子移出舞台,Actionscript随机粒子生成器,actionscript-3,flash,Actionscript 3,Flash,下面是一些随机粒子生成器的代码。我想改变它,使粒子在停止之前只移动一小段距离,而不会消失。就像现在这样,他们一直在移动,直到他们离开舞台。我是Actionscript的新手,因此任何帮助都将不胜感激,谢谢 var particleArray:Array = new Array(); var maxParticles:Number = 50000; function addParticle(e:Event) { var Symbol:Symbol3 = new Symbol3();

下面是一些随机粒子生成器的代码。我想改变它,使粒子在停止之前只移动一小段距离,而不会消失。就像现在这样,他们一直在移动,直到他们离开舞台。我是Actionscript的新手,因此任何帮助都将不胜感激,谢谢

var particleArray:Array = new Array();
var maxParticles:Number = 50000;

function addParticle(e:Event)
{
    var Symbol:Symbol3 = new Symbol3();
    Symbol.alpha = Math.random() * .8 + .2;
    Symbol.scaleX = Symbol.scaleY = Math.random() * .8 + .2;
    Symbol.xMovement = Math.random() * 10 - 5;
    Symbol.yMovement = Math.random() * 10 - 5;
    Symbol.x = mouseX;
    Symbol.y = mouseY;
    particleArray.push(Symbol);
    addChild(Symbol);
    Symbol.cacheAsBitmap = true;

    if (particleArray.length >= maxParticles)
    {
        removeChild(particleArray.shift());
    }

    Symbol.addEventListener(Event.ENTER_FRAME,moveParticle);
}

function moveParticle(e:Event)
{
    e.currentTarget.x += e.currentTarget.xMovement;
    e.currentTarget.y += e.currentTarget.yMovement;
}

var myTimer:Timer = new Timer(50);
myTimer.addEventListener(TimerEvent.TIMER, addParticle);
myTimer.start();

一种方法是在多次执行后删除事件侦听器:

function addParticle(e:Event)
{
    var Symbol:Symbol3 = new Symbol3();
    Symbol.alpha = Math.random() * .8 + .2;
    Symbol.scaleX = Symbol.scaleY = Math.random() * .8 + .2;
    Symbol.xMovement = Math.random() * 10 - 5;
    Symbol.yMovement = Math.random() * 10 - 5;

    // set the number of times this instance can move. 
    // Using a randomly generated number here
    Symbol.movementCount = int(Math.random() * 10); 
    Symbol.x = mouseX;
    Symbol.y = mouseY;
    particleArray.push(Symbol);
    addChild(Symbol);
    Symbol.cacheAsBitmap = true;

    if (particleArray.length >= maxParticles)
    {
        removeChild(particleArray.shift());
    }

    Symbol.addEventListener(Event.ENTER_FRAME,moveParticle);
}

function moveParticle(e:Event)
{
    e.currentTarget.x += e.currentTarget.xMovement;
    e.currentTarget.y += e.currentTarget.yMovement;

    // decrement your move count, and then check to see if it's hit zero
    e.currentTarget.movementCount--;
    if(e.currentTarget.movementCount <=0)
    {
        // if so, remove the event listener
        e.currentTarget.removeEventListener(Event.ENTER_FRAME, moveParticle);
    }
}
函数addParticle(e:事件)
{
变量符号:Symbol3=新的Symbol3();
Symbol.alpha=Math.random()*.8+.2;
Symbol.scaleX=Symbol.scaleY=Math.random()*.8+.2;
Symbol.xMovement=Math.random()*10-5;
Symbol.yMovement=Math.random()*10-5;
//设置此实例可以移动的次数。
//在这里使用随机生成的数字
Symbol.movementCount=int(Math.random()*10);
Symbol.x=鼠标;
Symbol.y=鼠标;
particleArray.push(符号);
addChild(符号);
Symbol.cacheAsBitmap=true;
如果(particleArray.length>=maxParticles)
{
removeChild(particleArray.shift());
}
Symbol.addEventListener(事件。输入帧,移动粒子);
}
函数moveParticle(e:事件)
{
e、 currentTarget.x+=e.currentTarget.x移动;
e、 currentTarget.y+=e.currentTarget.yMovement;
//减少移动次数,然后检查是否达到零
e、 currentTarget.movementCount--;

如果(e.currentTarget.movementCount这是我找到的一个教程的代码,我在实际的程序中添加了大量其他功能,但我认为这与这个问题无关,我想保持它的简单。这是我唯一无法理解的事情。这是到教程的链接:我想如果我只调用moveParticle funAction有几次,我已经厌倦了在while循环多次迭代后删除事件侦听器,但可能不起作用,因为每次调用addParticle时都会再次添加它。。。