1

を使用して 2D ゲームを開発しCanvas/Surfaceviewていますが、スレッドに問題があります。だから私が達成したいのは、たとえばSpawnEnemy()、毎秒、秒刻み、攻撃などのバックグラウンドでの何かです。

私は Thread.wait を試しましたが、それは痛みを引き起こし、ゲームを 2fps にします。

ここに私のゲームループがあります:

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 ではないバックグラウンド (秒) でカチカチ音をたてるものが必要です。

4

2 に答える 2

0

バックグラウンドで実行する何かに AsyncTaskを使用できます

于 2011-09-25T11:39:46.267 に答える
0

スレッドで通常 60 fps 程度のゲームを実行する必要があります。次の例を参照してください:キャンバス内でアニメーション フレームワークを使用するにはどうすればよいですか?

1 秒ごとに何かをしたい場合は、onDraw() でフレームをカウントし、60 番目のフレームごとにそれを行うか、より高い精度が必要な場合は、各 onDraw() でシステム時間をチェックし、1 秒が経過したときに何かを行います。経過。

また、スレッドから呼び出される onDraw() の描画用とゲーム ロジック用の 2 つのメソッドの使用を検討する必要があります。

于 2011-09-25T12:23:08.887 に答える