java - 在 Java2D 中绘制子类的哪个组件(对于 2D 游戏)

标签 java timer java-2d frame-rate

我已经创建了我自己的 Canvas ,该 Canvas 是从 JPanel 扩展而来的,但是我注意到带有内容等等,突然间我的 FPS 受到了影响。我遵循 Filthy Rich Clients 的 swing 规则,使用 paintComponent,创建剪辑区域,仅重绘已更改的内容,等等。我将 FPS 设置为恒定的 50 FPS,我注意到有时我的 FPS 会跳到 31/32 FPS,然后回到 50 FPS,依此类推。在运行我的程序时,它只使用了大约 25MB 的 RAM 和 0 的 CPU,即使在渲染时也是如此。我也有 OpenGL 设置。

注意:我没有图像,这是严格使用图形中的形状。

在 JPanel 上绘制所有内容是否会对性能造成重大影响?我应该扩展一个不同的组件吗(我一直看到 Canvas 组件)?在 JPanel 中构建俄罗斯方 block (或任何其他复古游戏)之类的游戏有多“聪明”?

这可能是计时器问题,因为我刚刚添加了 100 个额外的绘画调用,而 FPS 仍然执行 50 32/31 的操作。

最佳答案

经过大量调查,我发现问题根本不是 JPanel 的问题。事实上,问题出在java中的Timer上。它不是 100% 准确,这导致 FPS 偏差很大。我解决这个问题的方法是阅读这个:koonsolo.com/news/dewitters-gameloop

关于java - 在 Java2D 中绘制子类的哪个组件(对于 2D 游戏),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5710356/

相关文章:

java - 定时器循环或替代方案?

java - Android 倒计时器 - 循环使用列表值重新启动计时器的 ArrayList

ios - 如何快速检查当前时间是否大于 jwt exp(expiration time)?

java - 无法让 Java2D 将简单的线条渲染到 Graphics 对象

java - 按钮大小不一样

java - 使用 JFileChooser 将文件插入到 Jlabel 中

java - 重新加载 jsp 并在 servlet 上丢失 request.getParameter ("...")

java - 如何从 Java SUB 客户端 (ZMQ) 上的 python ZeroMQ PUB 服务器接收数据

java - 使用 Graphics2D Area 的替代方案?

java - 设置ContentPane不起作用