2011-05-09 93 views
1

只是爲了記錄,我使用的是AS3。隨機刪除陣列

我有一個問題,我想在AS3中隨機刪除一個精靈,我已經設法弄清楚如何創建精靈,使他們填充爲網格,只是爲了我的生活,我無法圖瞭解如何刪除它們!

下面是我用來創建它們的代碼:

function showpixels() : void 
{ 

    for (var i:int = 0; i < 40; i++) 
    { 
     for (var j:int = 0; j < 40; j++) 
     { 
      var s:Sprite = new Sprite(); 
      s.graphics.beginFill(0); 
      s.graphics.drawRect(i*10, j*10, 10, 10); 
      s.graphics.endFill(); 
      addChild(s); 
      pixels.push(s); 
     } 
    } 
} 

基本上我需要這些被刪除隨機直到什麼下面可以看到。

任何幫助都會很好,我很新!謝謝!

回答

1
function removeRandom():void 
{ 
    var rand:uint = Math.random()*pixels.length; 

    var i:Sprite = Sprite(pixels[rand]); 

    if(i.parent) i.parent.removeChild(i); 
    pixels.splice(rand, 1); 
} 

UPDATE:要刪除在隨機時間間隔你可以嘗試這樣的事:

var _timer:int = 100; 

addEventListener(Event.ENTER_FRAME, _handle); 
function _handle(e:Event):void 
{ 
    if(pixels.length > 0) _timer --; 
    if(_timer < 1) 
    { 
     _timer = 10 + Math.random()*50; 
     removeRandom(); 
    } 
} 

function removeRandom():void 
{ 
    var rand:uint = Math.random()*pixels.length; 

    var i:Sprite = Sprite(pixels[rand]); 

    if(i.parent) i.parent.removeChild(i); 
    pixels.splice(rand, 1); 
} 
+0

嘿馬蒂,由於這是那種我的嘗試,這是有幫助!基本上我希望他們都是隨機刪除,直到整個背景被刪除。我會努力工作,謝謝! – Seb 2011-05-09 09:15:11

+0

+1。它可以被縮短爲'removeChild(pixels.splice(Math.random()* pixels.length,1)[0])' – back2dos 2011-05-09 09:17:28

+0

是的,儘管我沒有運行時會遇到很多空對象引用錯誤** **如果(父母)** removeChild ** ** – Marty 2011-05-09 09:23:35

1

馬蒂的思想工作。另一種選擇是先將數組進行混洗,然後再彈出元素。

要洗牌Array使用pixels.sort(function (...args):int { return int(2*Math.random()-1) })

然後你就可以簡單的刪除它們像這樣:

function remove():void { 
    if (pixels.length) removeChild(pixels.pop()); 
    else clearInterval(this.id); 
} 

而在showpixels的末尾添加一行:

this.id = setInterval(remove, 500);