最近我遇到了 Java 的全屏独占模式。当我自己尝试时,我遇到了一些问题:在全屏模式下在 JFrame 或 Frame 中渲染完全相同的内容需要更长的时间(40 fps),而不是在未装饰和最大化的窗口中(150-200 fps)。我的屏幕设置为 50 fps,即每帧 20 毫秒,我看不到这段时间在哪里丢失。我唯一的想法是,Jave——出于某种原因——决定在全屏时使用我的板载显卡。
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);
}
基本上就是这样,而且仍然:所谓的高效全屏模式非常慢。