最近我遇到了Java的全屏独占模式。当我自己尝试时,我遇到了一些情况:在全屏模式下渲染JFrame或Frame中完全相同的内容比未修剪和最大化窗口(150-200 fps)需要更长的时间(40 fps)。 我的屏幕设置为50 fps,即每帧20毫秒,我看不到,在这个时间丢失。我唯一的想法是,那个Jave--出于某种原因 - 决定在全屏时使用我的板载图形卡。Java效率:全屏独占模式
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);
}
这基本上,仍然:所谓高效的全屏模式是该死的慢。
好恶。不要停顿。跳过并插入。 – 2012-08-16 00:52:46
你介意给我一个关键字来搜索吗?从来没有听说过这种情况 - 猜猜发生了什么,当你在学校学习java的时候.. – brickBreaker 2012-08-17 18:03:27
通常delta不是用来确定暂停的,而是用来更新模型的。当然,这并不总是奏效(例如DVD /电影播放需要非常精确的绘画时间,或者人们对不均匀的画面感到恼火),但对于游戏,尤其是“非谨慎”移动的游戏,减慢FPS的一种方式是, FPS是“相对高的”(例如> 60),如果需要(只是不要阻塞线程),就是“跳过”绘制到下一个重绘周期。 – 2012-08-17 18:14:47