Java游戏使用线程在屏幕上移动内容,减慢速度

时间:2013-12-28 21:49:56

标签: java multithreading graphics

我正在研究java中一个简单的“乒乓球”2D游戏。

(我之前关于这个问题的问题涉及一个计时器。我已将其更改为一个主题,这是一个不同的主题,所以我认为它适合提出一个新问题。)

游戏使用一直运行的线程,以便在屏幕上移动对象,并不断重新绘制它。

我已经在线程中添加了一些代码,以确保游戏以恒定速度运行,但这似乎不起作用。

在游戏的前几秒,它总是非常快(“乒乓球”飞得很快),然后它突然减速,达到一个看起来非常稳定的速度。

为什么会这样?以下是run()的{​​{1}}方法的代码:

Runnable

1 个答案:

答案 0 :(得分:3)

IMO你不应该依赖睡眠'实时'中的方法游戏。

你应该做的是:

  1. 定义与时间跨度相关的速度。 (假设您拥有的任何速度意味着这是实体在1000毫秒内移动的单位数量)。例如。你的球在1000毫秒内移动10px。
  2. 每次循环开始另一轮时,计算最后一次循环运行时的时差。
  3. 让我们说以前的循环运行(在重度滞后之后)过去是500毫秒。
  4. 您计算时间百分比:500毫秒/ 1000毫秒* 100 = 50%
  5. 将时间百分比应用于每个与时间相关的操作。例如。移动球:10px * 0.5 = 5px。意思是:将此球移动5px。
  6. 与游戏中的任何其他东西相同,这取决于时间!

    使用这个'思考'你将使你的引擎独立运行'它将在任何机器上运行(基本上)相同。 (不要引用我的话:P)

    唯一一次(imho)睡眠是可以的,就是当你想要减慢游戏速度以防它跑得太快时 - 因为你可以得到非常小的数字...