我正在制作一个只有电脑才能玩的游戏演示,但速度太快了。我需要它来显示一举一动。
该程序使用一个while循环,它没有任何支持事件侦听器的东西。它只需要计算机来移动。
您可以有一个后台任务来触发移动并在移动之间适当地等待。就像是:
Runnable moveTask = new Runnable () {
public void run() {
while (true) {
Thread.sleep(...);
SwingUtilities.invokeLater(theActualMoveHere());
}
}
}
new Thread(moveTask).start();
您将需要添加一个停止机制(通过中断)并且可能使逻辑复杂化,但基本思想应该有效。
作为睡眠的替代方法,您可以使用Timer每 x 毫秒安排一次移动。请注意,Timer 的分辨率不是很好,可能高达 30ms,因此可能不够精确,无法满足您的需要。
您可以使用线程睡眠方法等待 X 时间。一些事情:
Thread.sleep(4000);
请参阅http://docs.oracle.com/javase/tutorial/essential/concurrency/sleep.html
如果您需要每秒循环一定次数,您可以计算每次迭代使用的时间,然后休眠所需的时间。例如:
boolean cont = true;
long time0, timeForEach = 1000, time1 = System.currentTimeMillis();
while (cont) {
// Do my things here.
time0 = System.currentTimeMillis();
try {
if (timeForEach > time0-time1) {
Thread.sleep(timeForEach - (time0-time1));
}
} catch (InterruptedException e) {
}
time1 = time0;
}
当我想减慢代码中的速度时,我通常使用计时器、睡眠或等待功能。你可能有一个函数,它为每一个动作或类似的东西迭代/循环(for、while、for in 等)。您可以在此类循环的每次迭代之间放置时间。
另一种策略是让计算机在将要进行的所有动作显示给最终用户之前生成它们。然后,当您向用户展示每一个动作时,您可以决定在单个动作上花费的时间是多少。