2015-12-12 23 views
0

我正在尝试动画一个简单的Java游戏,其中包括一个球的运动。我目前对球的计算是:当前的X位置+ X方向*球速度,对于Y也是一样。为了确保球始终以相同的速度移动,我希望包含增量时间。目前,我有:如何在Java游戏中使用增量时间?

long time = System.currentTimeMillis(); 

然后在游戏圈我有

long currentTime = System.currentTimeMillis(); 
int changeInTime = int(time-currentTime); 
time = currentTime; 

我想用增量时间,以确保球在X移动1个像素,Y方向每隔30毫秒。计算changeInTime/40的移动速度比我能看到的要快,然后它会卡在角落里。有任何想法吗?

+1

有一个整个游戏开发StackExchange网站。 http://gamedev.stackexchange.com/questions/13008/how-to-get-and-use-delta-time – WalterM

+1

是不是你的'changeInTime'消极?不应该是'int changeInTime =(int)(currentTime-time)',也可以使用'System.nanoTime()',否则当操作系统时钟改变时你会有一些有趣的毛刺。 – user3707125

回答

0

对于delta时间的工作,你必须在循环中设置两个变量,否则time - currentTime只是不断增加,因为这将是自程序开始执行以来的时间。

例子:

long lastTime = System.currentTimeMillis(), time; 

while (isRunning) { 
    time = System.currentTimeMillis(); // set time 
    // Do stuff 
    lastTime = time; // set last time 
} 
+0

你看过这个问题吗?作者已经这样做了:'time = currentTime;' – user3707125

0

如果你打算做一个游戏,这可能是一个好主意,使用一个线程,以动画球,如果你这样做,你可以延迟球睡眠()'方法。

+0

你是如何得出结论的:没有渲染线程,并且在画框之后它没有睡觉?线程睡眠的事实并不否认计算所用时间的必要性。 – user3707125

+0

我确实使用了一个线来动画球,但是我没有德尔塔时间的问题是球似乎突然变慢,然后加速。 – user3866812