2011-09-25 63 views
1

我正在開發一個使用Canvas/Surfaceview的2D遊戲,並且存在線程問題。 所以我想要完成的是背景中的一些東西,例如: 每秒SpawnEnemy()或打勾秒或攻擊。Android開發:遊戲後臺循環

我試過Thread.wait,但那只是造成痛苦,讓我的遊戲2fps。

這裏是我的gameLoop:

import android.graphics.Canvas; 

public class GameLoopThread extends Thread { 
     static final long FPS = 20; 
     private GameView view; 
     private boolean running = false; 

     public GameLoopThread(GameView view) { 
      this.view = view; 
     } 

     public void setRunning(boolean run) { 
      running = run; 
     } 

     @Override 
     public void run() { 
      long ticksPS = 1000/FPS; 
      long startTime; 
      long sleepTime; 
      while (running) { 
        Canvas c = null; 
        startTime = System.currentTimeMillis(); 
        try { 
          c = view.getHolder().lockCanvas(); 
          synchronized (view.getHolder()) { 
            view.onDraw(c); 
          } 
        } finally { 
          if (c != null) { 
            view.getHolder().unlockCanvasAndPost(c); 
          } 
        } 

        sleepTime = ticksPS - (System.currentTimeMillis() - startTime); 
        try { 
          if (sleepTime > 0) 
            sleep(sleepTime); 
          else 
            sleep(10); 
        } catch (Exception e) {} 
      } 
     } 
} 

所以我想這是在後臺(秒)滴答作響的東西,不thread.wait。

回答

0

你應該讓你的線程運行的遊戲通常約60fps的,看下面的例子:How can I use the animation framework inside the canvas?

如果您想爲每一秒做一些事情,那麼你要麼在onDraw()中計算幀數,要在每個第60幀上進行計數,或者如果您需要更高的精度,則每次onDraw()都會檢查系統時間,並在一秒鐘後執行某些操作。

你還應該考慮使用兩種方法來繪製onDraw(),另一種方法用於從線程調用的遊戲邏輯。

0

你可以使用AsyncTask的東西在後臺運行