Java 2D游戏-计时器与线程?

Java 2D游戏-计时器与线程?,java,multithreading,timer,Java,Multithreading,Timer,嘿,伙计们,我正在制作我的第一个2D Java游戏,目前我正在使用计时器来控制和更新一切。我想知道什么方法最适合2D Java游戏,计时器还是线程?目前,我的gameCanvas类中有一个计时器,可以渲染/绘制所有内容以及检查冲突。我还有一个计时器,用来移动我的球员 我使用计时器的唯一原因是因为我对Java编程还不熟悉,考虑到当时我所要说的,这似乎是最简单的方法: Timer timer = new Timer(5,this); timer.start(); 你们推荐什么?这取决于游戏类型 对

嘿,伙计们,我正在制作我的第一个2D Java游戏,目前我正在使用计时器来控制和更新一切。我想知道什么方法最适合2D Java游戏,计时器还是线程?目前,我的gameCanvas类中有一个计时器,可以渲染/绘制所有内容以及检查冲突。我还有一个计时器,用来移动我的球员

我使用计时器的唯一原因是因为我对Java编程还不熟悉,考虑到当时我所要说的,这似乎是最简单的方法:

Timer timer = new Timer(5,this);
timer.start();

你们推荐什么?

这取决于游戏类型

对于“快速游戏”(例如射击游戏),具有屈服/等待(视情况而定)的专用游戏循环(可能在线程中)通常最有效。对于“慢游戏”来说,计时器可以正常工作——但是,有两种类型的计时器:

  • “摆动”计时器
  • 优点:在EDT上运行,因此可以触摸Swing/AWT对象
  • 缺点:在EDT上运行,因此分辨率和时间保证较差
  • “服务”计时器
  • 优点:
  • 支持“固定速率”计时器
  • 在自己的线程上运行(因此分辨率/一致性更好,但不能保证)
  • 缺点:不能在EDT上运行(因此不能触摸Swing/AWT)
  • 在许多情况下,游戏仍然必须计算最后一个事件发生时和当前事件发生时之间的“增量”,并在计算中使用该值。如果没有使用三角形的模型,游戏速度将因系统而异

    就我个人而言,我会推荐一款高分辨率的时钟,非常适合“快速游戏”循环。它还支持“直接”OpenGL绑定;-)

    我没有任何开发“慢游戏”的经验


    快乐编码。

    这取决于游戏类型

    对于“快速游戏”(例如射击游戏),具有屈服/等待(视情况而定)的专用游戏循环(可能在线程中)通常最有效。对于“慢游戏”来说,计时器可以正常工作——但是,有两种类型的计时器:

  • “摆动”计时器
  • 优点:在EDT上运行,因此可以触摸Swing/AWT对象
  • 缺点:在EDT上运行,因此分辨率和时间保证较差
  • “服务”计时器
  • 优点:
  • 支持“固定速率”计时器
  • 在自己的线程上运行(因此分辨率/一致性更好,但不能保证)
  • 缺点:不能在EDT上运行(因此不能触摸Swing/AWT)
  • 在许多情况下,游戏仍然必须计算最后一个事件发生时和当前事件发生时之间的“增量”,并在计算中使用该值。如果没有使用三角形的模型,游戏速度将因系统而异

    就我个人而言,我会推荐一款高分辨率的时钟,非常适合“快速游戏”循环。它还支持“直接”OpenGL绑定;-)

    我没有任何开发“慢游戏”的经验


    愉快的编码。

    pst关于这两种方法的优缺点所说的绝对正确

    不过,我也不推荐。我会使用一个“专为游戏而设计”的游戏引擎,例如,它将极大地帮助你在游戏中更新和逻辑,主游戏循环的结构,以及处理你将遇到的许多低级问题

    如果你考虑在游戏中使用Swing,我也会远离它,原因如下

    预构建用于处理计时问题,并计算渲染帧之间的增量等。您还可以获得许多不需要自己构建的好东西,例如输入处理(键盘、鼠标、控制器)、加速图形(您的游戏将自动受益于图形加速,因为引擎会为您解决这一问题),当您准备好播放音频时,它还有一个很棒的音频库


    你自己写这些东西会让你想哭。除非你真的想构建引擎本身(而不是花时间构建游戏逻辑本身),当您可以使用现成的成熟工具时,构建引擎需要花费大量时间。

    pst关于这两种方法的优缺点的说法绝对正确

    不过,我也不推荐。我会使用“专为游戏设计”的游戏引擎,例如,它将极大地帮助您了解游戏中的更新和逻辑、主游戏循环的结构,以及处理您将遇到的许多低级问题

    如果你考虑在游戏中使用Swing,我也会远离它,原因如下

    预构建用于处理计时问题,并计算渲染帧之间的增量等。您还可以获得许多不需要自己构建的好东西,例如输入处理(键盘、鼠标、控制器)、加速图形(您的游戏将自动受益于图形加速,因为引擎会为您解决这一问题),当您准备好播放音频时,它还有一个很棒的音频库


    你自己写这些东西会让你想哭。除非你真的想构建引擎本身(而不是花时间构建游戏逻辑本身),当你可以使用现成的成熟工具时,构建引擎需要花费大量时间。

    谢谢,现在我的游戏是简单的2D迷宫拼图。你认为什么是最好的解决方案?@pst+1请不要复杂(所以不能触摸Swing/AWT)和必需的javax.swing.Action…谢谢,现在我的游戏是简单的2D迷宫游戏。你认为什么是最好的解决方案?@pst+1没有什么复杂的,请(所以不能触摸swing/AWT)和必需的javax.swing.Action…从头开始写它很有趣!我说!;-)+1:)它肯定可以。我刚刚了解到,我更喜欢把时间花在游戏上,而不是工具上。这绝对是一个好主意