2013-12-22 43 views
0

我正在創建一個遊戲,其中敵人從圖書館中產生到舞臺上。我不希望產生新的敵人,而是希望能夠在「虛擬」池中擁有20個敵人。這些敵人會隨機產生,當玩家點擊敵人時,他們會死亡並得到回收。如何創建將在未來使用的虛擬影片剪輯池?

這是我的循環代碼來創建敵人:

function makeEnemies():void 
{ 
    var chance:Number = Math.floor(Math.random() * 150); 
    if (chance <= level && enemies.length < 4) 
    { 
     tempEnemy = new Enemy(); 
     tempEnemy.x = Math.round(Math.random() * 480); 
     addChild(tempEnemy); 
     tempEnemy.scaleX = 1.5; 
     tempEnemy.scaleY = 1.5; 
     tempEnemy.cacheAsBitmapMatrix=identityMatrix; 
     enemies.push(tempEnemy); 

     tempEnemy.speed = enemyBaseSpeed + ((level - 1) * speedLevelInc); 
     if (tempEnemy.speed > MAX_SPEED) 
     { 
      tempEnemy.speed = MAX_SPEED; 

     } 


    } 

} 

function moveEnemies():void 
{ 
    var tempEnemy:MovieClip; 


    for (var i:int =enemies.length-1; i>=0; i--) 
    { 
     tempEnemy = enemies[i]; 
     if (tempEnemy.dead) 
     { 
      score++; 
      score++; 
      roachLevel.score_txt.text = String(score); 
      enemies.splice(i,1); 

     } 
     else 
     { 

      tempEnemy.rotation += (Math.round(Math.random()*.4)); 
      tempEnemy.y += (Math.cos((Math.PI/180)*tempEnemy.rotation))*tempEnemy.speed; 
      if (tempEnemy.x < 10) 
      { 
       tempEnemy.x = 11; 
      } 
      if (tempEnemy.x > stage.stageWidth - offset) 
      { 
       tempEnemy.x = stage.stageWidth - offset; 
      } 
      if (tempEnemy.y > stage.stageHeight) 
      { 
       removeEnemy(i); 

       lives--; 
       roachLevel.lives_txt.text = String(lives); 
      } 
     } 
    } 
} 

我不想使用類。只是圖層內的代碼。

+0

您是否嘗試過實施它?從它的聲音你已經知道它是如何工作的。它就像一個單一的數組一樣簡單。 – TreeTree

回答

0

如果你想「回收」這些敵人,你可以做的是創建一個數組,因爲參數的緣故,我們稱之爲陣列enemyPool,每當玩家殺死一個敵人,獲取對它的引用,使removeChild調用將其從舞臺上移除,然後再次使用該參考,將敵方物體存儲到enemyPool陣列中。

當你需要將另一個敵人放回屏幕時,只需從enemyPool陣列中彈出一個,再次對該對象執行任何初始化,然後再讓你的addChild調用再次顯示在屏幕上。

+0

你能告訴我如何把敵人放在舞臺上的代碼會是怎樣的?還有回收代碼呢? – Razer