我正在用java创建一个galaga克隆。我试图理解游戏循环的基础知识,我有几个问题/问题。我有一个更新方法,可以更改所有游戏对象的位置,我有一个绘制方法,可以绘制所有对象的更新位置。我应该调用paint()方法吗?如何重新绘制对象(清除屏幕然后再绘制所有内容)?另外,以固定速率调用update()方法的最佳方法是什么?感谢您的任何意见。
{{1}}
答案 0 :(得分:0)
我有一个更新方法,可以更改所有游戏对象的位置
是的,好的
我有一个绘制方法,可以绘制所有对象的更新位置
啊......不太好
我应该调用paint()方法吗?
不,你永远不应该这样做,事实上,你也不应该打电话给getGraphics
,这不是绘画的方式。
通常会调用repaint
来触发新的绘画循环。
看看Painting in AWT and Swing和Performing Custom Painting有关绘画在Swing中的作用 - 我假设您根据自己使用的方法使用Swing
另外,请注意,Swing是单线程 - 有关更多详细信息,请参阅Concurrency in Swing;有关更简单的解决方案,请参阅How to use Swing Timers。
如果您仍想使用Thread
,请注意,该绘画可能会因任何原因而在任何时间发生,这些原因是您无法控制的,因此您需要了解脏涂料的风险更新状态
如果您想要更好地控制绘画/更新周期,那么您应该看一下BufferStrategy and BufferCapabilities
答案 1 :(得分:0)