2013-12-13 107 views
0

我有一個遊戲,我轉換到我的Android手機。我嘗試了兩種渲染方式,發現CPU模式比我的類型遊戲更適合GPU。在GPU模式下,遊戲存在很多延遲,而圖形並不像CPU模式那樣鋒利。遊戲的目的是殺死來自屏幕頂部的敵人,然後觸及底部。當遊戲開始的時候,它根本就不是遲鈍的,但是當屏幕上有幾個敵人時它開始滯後,並且它們開始快速下降。這是產生敵人的代碼:如何優化我的Android Flash遊戲?

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); 
     tempEnemy.cacheAsBitmap = true; 
     addChild(tempEnemy); 
     tempEnemy.scaleX = 1.5; 
     tempEnemy.scaleY = 1.5; 
     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.x -= (Math.sin((Math.PI/180)*tempEnemy.rotation))*tempEnemy.speed; 
      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

有一定的優化,可以使(無論這是不夠的,我不能告訴):

  1. 你不需要的cacheAsBitmap如果您已轉換一切的位圖,所以註釋掉這行

  2. 不設定比例!這肯定會減慢速度。由於縮放比例似乎總是爲1.5,因此只需調整圖形大小

  3. 如果可能的話,不要在每次迭代時設置tempEnemy.rotation。你可以讓tempEnemy成爲一個「預旋轉」時間軸中每幀的MovieClip嗎?這對Flash更有效。如果您仍然需要它來計算tempEnemy.x和y,則旋轉可以設置爲MovieClip類中的Number屬性。

  4. (有幾個小的事情,你可以優化,比如設置變種K =(Math.PI/180)* tempEnemy.rotation)在敵人loop--但這不會得到你很多)