我已经创建了自己的画布,已经从JPanel扩展,但是我注意到内容等等,突然间我的FPS受到了打击。我遵循Filthy Rich Clients的swing规则,使用paintComponent,创建剪辑区域,仅重绘已更改的内容,等等。我将FPS设置为恒定的50 FPS,我注意到有时候我的FPS会跳到31/32 FPS然后再回到50 F等等。在运行我的程序时,它只使用大约25MB的RAM和0的CPU,即使在渲染时也是如此。我也有OpenGL设置。
注意:我没有图像,这是严格使用图形中的形状。
通过在JPanel上绘制所有内容是否会影响性能?我应该扩展一个不同的组件(我一直看到Canvas组件)?在JPanel中构建像俄罗斯方块(或任何其他复古游戏)这样的游戏有多“聪明”?
这可能是一个计时器问题,因为我刚添加了100个额外的绘画调用,而FPS仍然执行50 32/31的事情。
答案 0 :(得分:1)
经过多次调查后,我发现问题根本不是JPanel。事实上,问题在于java中的Timer。它不是100%准确,这导致FPS离开。我解决这个问题的解决方案是:koonsolo.com/news/dewitters-gameloop
答案 1 :(得分:0)
我意识到你发现Timer类有问题,不过我还有另外一条评论,你可能觉得它很有用:
您没有提到是否使用双缓冲技术。如果你不是,那么你可能注意到FPS的改善。
如果您不熟悉该技术,则需要创建一个单独的面板缓冲区,在此缓冲区上重绘场景,然后将此缓冲区切换为屏幕上的缓冲区等。