我在Netbeans 6.7.1中制作Braid。
电脑规格:
Windows 7
Running processes: 46
Running threads: +/- 650
NVidia GeForce 9200M GS
Intel Core 2 Duo CPU P8400 @ 2.26Ghz
正常运行的游戏规范:
Memory: between 80 MB and 110 MB
CPU: between 9% and 20%
CPU when time rewinding: 90%
调试会话的值相同,除非我倒回时间:CPU:20%。
有什么理由吗?有没有办法在正常运行时达到相同的性能。
这是我重新粉刷的代码:
@Override
public void repaint()
{
BufferStrategy bs = getBufferStrategy(); // numBuffers: 4
Graphics g = bs.getDrawGraphics();
g.setColor(Color.BLACK);
g.fillRect(-1, -1, 2000, 2000);
gamePanel.paint(g.create(x, y, gameDim.width, gameDim.height));
bs.show();
g.dispose();
Toolkit.getDefaultToolkit().sync();
update(g);
}
游戏全屏运行(未修饰+ frame.size =屏幕大小)
马亭
答案 0 :(得分:2)
您使用哪个框架?或者你自己写了一个?在后一种情况下,您使用System.currentTimeMillis()或System.nanoTime()来限制FPS吗?
Debugmode可能会在Windows下更改操作系统中断速率的分辨率,从而也会更改System.currentTimeMillis()的分辨率。
我有一个类似的案例,在使用VisualVM时我的游戏运行得更快。使用System.nanoTime()而不是System.currentTimeMillis()来计算Thread.sleep()的值来修复它。
您可以在此处详细了解此主题: http://blogs.oracle.com/dholmes/entry/inside_the_hotspot_vm_clocks
答案 1 :(得分:1)
repaint()
方法很便宜,因为在处理之前会合并多个请求。我会猜测,在调试器下,更多重新绘制正在合并到paint()
的实际调用中。
尝试保留每次调用paint()
或paintComponent()
时更新的计数器。如果我是对的,那么在调试器下运行时应该会看到更少的调用。