最近、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);
}
基本的にはそれだけですが、それでも、いわゆる効率的なフルスクリーンモードは非常に遅いです.