1

このチュートリアルを使用してゲームループを作成しようとしています。

以下に示すように、これを最初のアクティビティクラスに実装しようとしましたが、いくつかの問題が発生しました。示されているようにフルクリーンでタイトル機能をリクエストしていませんが、取得できず、requestRenderが機能しません。

「running」がfalseに設定されている場合、ゲームループはスキップされ、レンダラーは1つのフレームをレンダリングします(rendermodeはdirtyに設定されています)

これは、running=trueの場合に行われることではありません。

import android.app.Activity;
import android.os.Bundle;
import android.os.SystemClock;
import android.util.Log;
import android.view.Window;
import android.view.WindowManager;



public class Practice extends Activity {

private Input input;
private GLSurfaceRenderer glSurfaceRenderer;
private final static int maxFPS = 30;
private final static int maxFrameSkips = 5;
private final static int framePeriod = 1000 / maxFPS;
public final static String TAG = "input";

public boolean running = true;


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
    input = new Input(this);
    setContentView(input);

    long beginTime;
    long timeDiff;
    int sleepTime;
    int framesSkipped;

    sleepTime = 0;
    while (running) {
        Log.d(TAG, "gameRunning");
        beginTime = System.currentTimeMillis();
        framesSkipped = 0;
        this.input.update();
        this.input.requestRender();
        timeDiff = System.currentTimeMillis() - beginTime;
        sleepTime = (int)(framePeriod - timeDiff);

        if (sleepTime > 0) {
            try{
                Thread.sleep(sleepTime);
            }catch(InterruptedException e){}
        }

        while(sleepTime < 0 && framesSkipped < maxFrameSkips){
            this.input.update();
            sleepTime += framePeriod;
            framesSkipped++;
            Log.d(TAG, "Frames Skipped");
        }

    }
}
}

現時点では、ゲームロジックは正常に更新されていますが、レンダラーはまったくレンダリングしていません(黒い画面のみ)

これはコードの単純な再シャッフルであると確信していますが、誰か提案がありますか?

4

1 に答える 1

3

問題の根本的な原因は、 onCreate() を返さないことです。これは、アプリが動作するために必要です。これは、すべての UI 入力と変更を処理するスレッドです。チュートリアル、基本的なUI チュートリアルを確認し、 Android ライフサイクルについて読んで、ANRに注意してください。物事がどのように機能するか、およびアクティビティを 2 番目のスレッドと組み合わせる方法について理解を深めることができます。

于 2011-09-15T19:04:15.643 に答える