嘿伙计们我正在制作我的第一个2D Java游戏,我目前正在使用Timers来控制和更新所有内容。我想知道什么方法最适合2D Java游戏,计时器或线程?目前我的gameCanvas类中有一个Timer,它可以渲染/绘制所有内容以及检查碰撞。我还为我的播放器配备了一个Timer,用于移动他。
我使用计时器的唯一原因是因为我是Java编程的新手,当时我认为所有必须放的是最简单的方法:
Timer timer = new Timer(5,this);
timer.start();
你们会推荐什么?
答案 0 :(得分:4)
关于这两种方法的利弊的说法是完全正确的。
但是,我也不建议。我会使用一个“专为游戏设计”的游戏引擎,例如Slick2D,它将极大地帮助你完成游戏中的更新和逻辑,主游戏循环的结构,以及照顾很多您将遇到的低级问题。
如果您正考虑将Swing用于游戏,我也会远离这一点,原因如in my answer here所述。
Slick2D是预先构建的,用于处理时间问题,并计算渲染帧之间的增量等。您还可以获得许多不需要自己构建的好东西,例如作为输入处理(键盘,鼠标,控制器),加速图形(您的游戏将自动受益于图形加速,因为引擎会为您完成此操作),当您为音频做好准备时,它还有一个很棒的音频库。
自己写这些东西会让你想哭。除非您真正构建引擎本身(而不是想花时间构建游戏逻辑本身),否则构建引擎需要花费大量时间才能使用现成的成熟工具。
答案 1 :(得分:2)
这取决于游戏类型。
对于“快速游戏”(例如射击游戏),具有产量/等待(视情况而定)的专用游戏循环(可能在线程中)通常将最佳地起作用。对于“慢速游戏”,计时器可以正常工作 - 但是,两种类型的计时器:
在很多情况下游戏必须计算最后一次事件发生时和当前事件发生时的“delta”,并在计算中使用它。如果没有使用delta的模型,游戏速度将因系统而异。
就个人而言,我建议LWJGL: Lightweight Java Game Library提供一个非常适合“快速游戏”循环的高分辨率时钟。它还支持“直接”OpenGL绑定; - )
我没有任何开发“慢游戏”的经验。
快乐的编码。