最近我遇到了Java的全屏独占模式。正如我自己尝试的那样,我遇到了一些问题:在全屏模式下在JFrame或Frame中渲染完全相同的内容比在未修饰和最大化的窗口(150-200 fps)中花费更长的时间(40 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);
}
基本上就是这样,并且仍然是:所谓的高效全屏模式非常慢。
答案 0 :(得分:0)
尝试按Why does my Java application run so slowly in full-screen mode? (and fine when windowed)
中的建议设置系统属性-Dsun.java2d.d3d=false
答案 1 :(得分:0)
如果上述答案无效,请以不同方式将窗口设置为全屏。
而不是:
GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
if(gd.isFullScreenSupported()) {
gd.setFullScreenWindow(window);
}
这样做(假设你正在使用JFrame
):
myFrame.setUndecorated(true);
myFrame.setExtendedState(JFrame.MAXIMIZED_BOTH);