2011-12-22 10 views
2

3秒ごとに複数のゲームオブジェクトを作成して画面に表示するのに問題があります。オブジェクトが1つだけの場合は問題ありませんが、複数を作成したい場合は問題が発生します。詳細に説明すると、メインのゲームループ(既存のゲームループと同じもの)があり、そのゲームループでは3秒ごとに新しいオブジェクトを作成し、ArrayListに追加してゲームパネルを更新します3秒ごとに画面上のすべてのオブジェクトを表示します。上のコードブロックは動作しますが、画面が画像で満たされるように速すぎます。私はそれを周期的にします。私は何をしなければなりませんか? UIスレッドのブロックを防ぐためにバックグラウンドスレッドを使用している場合、どうすればいいですか?ゲームオブジェクトを作成して3秒ごとに画面に表示する

ありがとうございます。

ここに私のコードブロックです: メインスレッドPART:

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クラスのUpdateメソッド: ます。public void更新(){

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

がここに構築されています解決策ですあなたの現在のコード:

あなたのスレッドのどこかに入れてください:

0123あなたのupdate()メソッドで

int savedtime = 0; 
long lastTime; 

//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

関連する問題