0

このチュートリアルを使用して、ゲーム ループを作成しました。

「一定のゲーム速度に依存する FPS」と記されたセクションには、スリープ コマンドを含むサンプル コードがいくつかあります。

Javaで同等のものをグーグルで検索したところ、

Thread.sleep();

しかし、それはEclipseでエラーを返します

Unhandled exception type InterruptedException

それは一体何を意味するのでしょう。

そしてまた、私は何だろうと思っていました

update_game();
display_game(); 

メソッドには、opengl-es ゲームに含まれる場合があります (つまり、レンダラーが更新された場所と、display_game() でどのようなことが行われるか);

現在、GLSurfaceView および GLSurfaceRenderer 機能を使用するシステムを使用しています

これがチュートリアルのコードの私の適応です

public Input(Context context){
    super(context);
    glSurfaceRenderer = new GLSurfaceRenderer();
    checkcollisions = new Collisions();
    while (gameisrunning) {
    setRenderer(glSurfaceRenderer);


    nextGameTick += skipTicks;
    sleepTime = nextGameTick - SystemClock.uptimeMillis();
    if(sleepTime >= 0) {
        Thread.sleep(sleepTime);
    }else{
        //S*** we're behind
    }

    }

これは GLSurfaceView で呼び出されますが、これを実装するのに適切な場所かどうかはわかりません。

4

3 に答える 3

1

皮肉なことに、Ron Romero のコードは機能しません。それには 2 つの問題があります: while ループと sleeptime 変数です。

sleepTime 変数は、指定されたスリープ時間 (ミリ秒単位) に基づいて設定されます。時間がかかり、現在のミリ秒時間から減算されます。これに関する問題は、現在のミリ秒時間が膨大な数であり (したがって long 変数タイプ)、NEGATIVE sleepTime 数値を提供することです。このコードでは while ループに入ることはありません。

2 番目に間違っているのは、while ループ チェック自体です。javaのスリープ機能を利用すれば、このようなループをする必要はありません。あなたがしなければならないことは、ミリ秒単位でスリープしたい sleepTime を sleep 関数に渡すだけで、うまく動作します。

private void waitUntil(long time) {
    try {
        Thread.sleep(time);
    } 
    catch (InterruptedException e) {
    //This is just here to handle an error without crashing
    }
}
于 2015-02-22T09:38:22.857 に答える
1

Android ゲーム開発に取り組む前に、Java のチュートリアルをいくつか実行する必要があるようです。次に、Android 開発に関するいくつかのチュートリアルを読んでから、より一般的なゲーム開発のチュートリアルを読んでください。(プログラミングは読書が多いです。)

スレッドが中断されると、スレッドは例外をスローしています。それを処理する方法を Java に指示する必要があります。

ただし、質問に直接答えるために、特定の時間までスリープするメソッドを次に示します。

private void waitUntil(long time) {
    long sleepTime = time - new Date().getTime();

    while (sleepTime >= 0) {
        try {
            Thread.sleep(sleepTime);
        } catch (InterruptedException e) {
            // Interrupted. sleepTime will be positive, so we'll do it again.
        }
        sleepTime = time - new Date().getTime();
    }
}

ゲーム開発を続ける前に、少なくともこの方法を理解しておく必要があります。

于 2011-09-09T20:17:49.833 に答える
0

Java は、チェック済み例外のコンパイル時のチェックを実行します。

于 2011-09-09T20:00:32.323 に答える