2016-03-15 84 views
0

下面是一些随机粒子生成器的代码。我想改变它,所以粒子在停止前只移动一小段距离而不会消失。就像现在一样,他们一直在走,直到他们离开舞台。我是新手脚本,所以任何帮助将不胜感激,谢谢。要做到这一点如何阻止粒子脱离舞台,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(); 
+0

这是代码的教程中,我发现,我已经在我的实际程序增加了其他功能的负荷但不认为它与这个问题有关,想保持简单。这是我试图做的唯一的事情,我无法弄清楚。这里是教程链接:http://www.schoolofflash.com/2008/03/flash-cs3-particle-effect/4/ – john

+0

我在想如果我只调用moveParticle函数几次,我已经累了在while循环之后删除事件监听器迭代多次,但不工作可能是因为每次调用addParticle时都会再次添加它。正如我所说,即时通讯和闪光新... – john

回答

0

一种方法是许多处决后删除事件侦听器:

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); 
    } 
}