Java图形/基本游戏循环

时间:2017-05-05 01:37:30

标签: java graphics

我正在用java创建一个galaga克隆。我试图理解游戏循环的基础知识,我有几个问题/问题。我有一个更新方法,可以更改所有游戏对象的位置,我有一个绘制方法,可以绘制所有对象的更新位置。我应该调用paint()方法吗?如何重新绘制对象(清除屏幕然后再绘制所有内容)?另外,以固定速率调用update()方法的最佳方法是什么?感谢您的任何意见。

{{1}}

2 个答案:

答案 0 :(得分:0)

  

我有一个更新方法,可以更改所有游戏对象的位置

是的,好的

  

我有一个绘制方法,可以绘制所有对象的更新位置

啊......不太好

  

我应该调用paint()方法吗?

不,你永远不应该这样做,事实上,你也不应该打电话给getGraphics,这不是绘画的方式。

通常会调用repaint来触发新的绘画循环。

看看Painting in AWT and SwingPerforming Custom Painting有关绘画在Swing中的作用 - 我假设您根据自己使用的方法使用Swing

另外,请注意,Swing是单线程 - 有关更多详细信息,请参阅Concurrency in Swing;有关更简单的解决方案,请参阅How to use Swing Timers

如果您仍想使用Thread,请注意,该绘画可能会因任何原因而在任何时间发生,这些原因是您无法控制的,因此您需要了解脏涂料的风险更新状态

如果您想要更好地控制绘画/更新周期,那么您应该看一下BufferStrategy and BufferCapabilities

答案 1 :(得分:0)

对于here找到的游戏循环,确实有很好的代码。以为我会分享这个链接以节省人们的时间!

使用具有固定时间步长的循环。此代码可以大大简化,因为该代码创建了一个弹跳球示例来显示帧的插值,以实现平滑性以及这种循环的好处。

我已经使用上面网站上的简化代码创建了pastebin。我将游戏循环分为不同的类,并在代码中添加了更多注释以显示正在发生的事情。这样一来,您无需遍历整个游戏循环就可以查看正在发生的事情及其运行方式,从而更轻松地创建自己的游戏。

让我知道我的pastebin版本的任何建议,我将对其进行更新:)

文件夹布局:

next