今天我一直在与一群同学讨论这个话题,他们每个人都在研究不同的想法,以“滥用”Java2D API 来制作一个简单的 2D 游戏。
我正在使用一个类扩展JComponent
并覆盖该paintComponent()
方法来获取Graphics2D
对象并从那里定义我的渲染逻辑。修改后JComponent
的是contentPane
我的覆盖JFrame
。
我的问题来了: call 和 in the 的后端对我的屏幕有什么paint(Graphics)
不同的影响repaint()
?我提到,当从我的“帧定时器”调用任何东西(每秒调用 50 次有问题的方法)时,屏幕的某些部分有时会闪烁,我清楚地告诉它渲染的某些东西是不可见的(或快速闪烁)和一切都感觉不对。这里有什么区别?我试图深入了解 AWT 后端的源代码,直到它以某种方式进行管理,但我停在那里以使我的大脑免受极其丑陋的代码的影响。update(Graphics)
JFrame
repaint()
EventQueue
PaintEvent
此外,在讨论整个repaint()
事情时,我们谈到了仅重新绘制与模型中的明确变化相对应的屏幕位置的“策略”,从而节省了我们的 CPU/GPU 功率。尽管完成这些事情(以及动画)仍然需要逻辑,但下一个问题是我如何“访问”FrameBuffer
已绘制屏幕的内容,以便我可以参考我的渲染已经完成的工作。
是的,我们已经经常听到 Java 可能不是以最佳方式支持我们正在寻找的所有操作的编程语言......