2

最近、Java の全画面排他モードに出会いました。JFrame または Frame でまったく同じコンテンツをフルスクリーン モードでレンダリングすると、装飾されていない最大化ウィンドウ (150 ~ 200 fps) よりも大幅に時間がかかります (40 fps)。私の画面は 50 fps に設定されています。これは 1 フレームあたり 20 ミリ秒であり、この時間がどこで失われるかわかりません。私の唯一の考えは、ジェイブが、何らかの理由で、フルスクリーンでオンボードのグラフィックカードを使用することを決定したということです。

GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
if(gd.isFullScreenSupported()) {
    try {
        gd.setFullScreenWindow(window);
    } finally {
        gd.setFullScreenWindow(null);
    }
} else {
    this.fullscreen = false;
}

計算された時間を一時停止することにより、フレームレートを特定のレベルに保持しようとするフレームで再描画を管理します。

int delta = (int) (System.currentTimeMillis() - timestamp); //timestamp: start of this round
if(animated - delta > 0)
    pause(animated - delta);

最後に、ダブル バッファリングを使用してフレームに描画します。

public void render(Graphics2D a) { //window graphics are passed
    Graphics2D g = (Graphics2D) backBuffer.getGraphics();
    //Adjusting some rendering hints here...
    //Then drawing some stuff...
    g.dispose();
    a.drawImage(backBuffer, 0, 0, null);
}

基本的にはそれだけですが、それでも、いわゆる効率的なフルスクリーンモードは非常に遅いです.

4

2 に答える 2

0

-Dsun.java2d.d3d=falseここで提案されているようにシステム プロパティを設定してみてください (そしてウィンドウ化されている場合は問題ありません)

于 2012-08-16T00:50:57.807 に答える
0

上記の答えがうまくいかない場合は、別の方法でウィンドウを全画面表示にしてください。

それ以外の:

GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
if(gd.isFullScreenSupported()) {
    gd.setFullScreenWindow(window);
}

これを行います(を使用していると仮定しますJFrame):

myFrame.setUndecorated(true);
myFrame.setExtendedState(JFrame.MAXIMIZED_BOTH);
于 2014-09-24T21:16:08.390 に答える