2016-03-15 175 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); 
    } 
}