2011-12-22 50 views
2

我每3秒在屏幕上創建和顯示多個遊戲對象時遇到問題。當只有一個對象時沒有問題,但如果我想創建多個對象,則會出現問題。詳細解釋,有一個主要的遊戲循環(與互聯網上的現有循環相同),並在該遊戲循環中,每隔3秒我想要創建一個新對象,將其添加到ArrayList,然後更新遊戲面板並每3秒顯示屏幕上的所有對象。上面的代碼塊工作,但它太快,所以屏幕充滿了圖像,我希望它是週期性的。我必須做什麼?如果使用後臺線程爲了阻止UI線程塊,我該怎麼做?每隔3秒在屏幕上創建並顯示遊戲對象

在此先感謝。

這裏是我的代碼塊: 主線部分:

while (running) { 
     canvas = null;   
     try { 
      canvas = this.surfaceHolder.lockCanvas(); 
      synchronized (surfaceHolder) { 
       beginTime = System.currentTimeMillis(); 

       this.gamePanel.update(); 

       this.gamePanel.render(canvas);   

      } 
     } finally { 
      if (canvas != null) { 
       surfaceHolder.unlockCanvasAndPost(canvas); 
      } 
     } // end finally 
    } 
我MainGamePanel類

和更新方法: 公共無效更新(){

int random = 5 + (int) (Math.random() * (200 - 5)); 
    droid = new Carrier(BitmapFactory.decodeResource(getResources(), 
      R.drawable.image), random, 1); 
    Carriers.add(Carrier); 

    for (int i = 0; i < Carriers.size(); i++) { 
     Carrier CarrierTemp = Carriers.get(i); 
     CarrierTemp .update(); 
    } 
} 

回答

1

下面是建立在一個解決方案您當前的代碼:

將此放入您的線索某處:

int savedtime = 0; 
long lastTime; 

在你的update()方法:

//Calculate time since last update: 
long now = System.currentTimeMillis(); 
savedtime += now - lastTime; 
lastTime = now; 
if(savedTime > 3000){//if more than three seconds have passed: 
    savedTime = 0; 
    int random = 5 + (int) (Math.random() * (200 - 5)); 
    droid = new Carrier(BitmapFactory.decodeResource(getResources(),R.drawable.image), random, 1); 
    Carriers.add(Carrier); 
} 
for (int i = 0; i < Carriers.size(); i++) { 
    Carrier CarrierTemp = Carriers.get(i); 
    CarrierTemp .update(); 
} 
+0

非常感謝哥們,有時不同的觀點可以節省一天。它是固定的。 – user1111781

+0

歡迎您:) – Jave

相關問題