2016-05-26 10 views
2

Java2D APIを使用してCanvas(アクティブレンダリング)で描画する独自のビルド済みゲームエンジンを使いこなしています。入力がないときにJava2Dベースのゲームエンジンが遅れる

ラップトップのキーボードでキーを押し続けたり、マウスを(枠の枠内で)動かしたりすると、四角い枠で囲まれたシンプルなシーンがよりスムーズにレンダリングされます。私が何もしなければ、動きは鈍いと感じます。

私のゲームエンジンでは、1回の描画で複数の更新が発生する固定のタイムステップレンダリングが使用されています。

私のフレーム構造:JFrameには、スレッドを使用して更新/レンダリングを実行する子Canvasがあります。

オペレーティングシステムはLinuxですが、問題になることはありますか? FPSカウンタは、どちらの場合も同じfpsを報告します。

マイループコードはこれです:

while(active) { 
    g = (Graphics2D) bs.getDrawGraphics(); 
    now = System.currentTimeMillis(); 
    double delta = now - prev; 
    while(delta >= 0) { 
     update(dt); 
     updateTicks++; 
     delta -= dt; 
    } 
    render(g); 
    bs.show(); 
    if(System.currentTimeMillis() - fpsTimer > 1000) { 
     fpsTimer += 1000; 
     System.out.printf("FPS: %d\n", updateTicks); 
     updateTicks = 0; 
    } 
    prev = now; 
    try { 
     Thread.sleep(5); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 
} 

私はそれはしかし、問題はないと思います。

更新:わずかなfpsの低下があります:毎秒5/7アップデート、私は舞台裏で起こっているframe..Somethingへの入力を提供しない場合..スレッドがある上

+0

ティック間の時間間隔を確認して、タイムステップが確実に固定されていることを確認しましたか? – ManoDestra

+0

ええ、それは私のコードでそれを強制するので、固定時間ステップです。しかし、それは主要な問題ではありません。私はフレーム上にマウスを動かすと滑らかさが増す理由を自分に尋ねています。 – Warrior

+0

私はキャンバス/フレームの上にマウスが置かれているために領域を無効にすることによって、キャンバスの追加の再描画を強制していると思われます。 – ManoDestra

答えて

0

チェックあなたの入力論理処理。

+0

AWTイベントディスパッチスレッドはゲーム入力を処理するので、別のスレッドです。イベント処理ロジックを無効にしようとしましたが、この動作は引き続き表示されます。 – Warrior

+0

強制的にフォームを再描画してください。 –

関連する問題