1

Androidにはメインループがありませんが、アルカノイドゲームテストでボールがあり、100ミリ秒ごとに位置を変更する必要があります。

MainThreadライブラリを使用してみましたが、それでも機能しません。

関数をオーバーライドしてonRunning()、画面がタッチされているかどうかを確認し、ボールを動かす方法があれば、それは素晴らしいことです。

しかし、関数を変更できないのでonRunning()、ボールをメインのゲームループに移動する関数を追加するにはどうすればよいでしょうか。

4

4 に答える 4

1

Main/Guiスレッドと非同期で実行される別のスレッドを作成できます

final boolean shouldRun = true;

Thread t = new Thread(){
    public void run(){
        while (shouldRun){
            //do what ever you need
            try{
                Thread.sleep(100); //sleep for 100ms
            } catch (Exception e) {

            }
         }
    }
 };

shouldRun = true;
t.start();

終わったら

shouldRun = false;
try { 
    t.join();
} catch (Exception e) { }

これは最も洗練されたソリューションではないことに注意してください。あるスレッドでゲームのロジックを処理し、別のスレッドで描画を処理するクラスを作成する必要があります。

さらに、アクティビティが一時停止されるたびに、ロジックゲームと描画を一時停止する必要があります。

于 2012-11-04T21:13:03.063 に答える
0

必要に応じて、トレッドのリペイントを作成するだけです。

次に例を示します:http://jmsliu.com/199/android-canvas-example.html

基本的なアニメーションの場合、ライブラリを使用する必要はありません。ただし、ゲームを開発したい場合は、ゲームエンジンの使用を検討する必要があります。

于 2012-11-04T21:12:05.153 に答える
0

私が知っているように、Androidにはメインループがありません

誰が言った?大まかな例:

public class MainLoop extends Thread {
   boolean isRunning;

   public void terminate() {
    isRunning=false;
   }

   public void run() {
      isRunning=true;
      while (isRunning) {          
      //move ball
      try { sleep(100);
      ...

また、デルタタイム測定を実装し、睡眠時間の値を修正する必要があります

于 2012-11-04T21:15:27.633 に答える
0

独自のスレッドからキャンバスに描画できるSurfaceViewを使用する必要があります。これにより、レンダリングの頻度を制御できます。

SurfaceViewの使用法については、この投稿を確認してください。

また、例に直接移動したい場合は、このリンクをチェックしてください

于 2012-11-04T21:35:45.670 に答える