在slick2d中设置增量的最大值和最小值

问题描述:

虽然在我的游戏中看起来很有趣,但我有一些基本的rts移动,您可以右键单击并移动到那里。但有时当我运行游戏时,单元移动速度比正常慢得多,但代码中没有任何变化(其他时间单元移动速度更快)。当我打开更多的程序,速度恢复正常,但如果我只是运行Netbeans,我会得到超级慢速运动。在slick2d中设置增量的最大值和最小值

我有一种感觉,它与delta值(不太确定)有什么关系,但是因为我是slick2d的新手,我不知道从哪里开始解决这个问题。

所以我的问题是,我可以限制增量值,所以它不能更新太慢或太快,是增量甚至我的问题?

http://pastebin.com/fRndGE2p //主类

http://pastebin.com/KJ8W3134 // PlayerStats

我现在看到。您没有打开VSync。
注意:VSync将帧频限制为显示器刷新率(通常为60fps)。
Ohh和最大/最小更新间隔在毫秒

所以下面的示例使游戏非常laggy:

app.setVSync(true);      // Turn VSync 
app.setMaximumLogicUpdateInterval(200); // Max. 200 miliseconds can pass 
app.setMinimumLogicUpdateInterval(100); // Min. 100 miliseconds must pass 

所以我认为你必须围绕数字播放,使其优化。

但是,这是不是你所需要的:d
我看到这一点:

player_X = player_X + velocityX; 
player_Y = player_Y + velocityY; 

因此,这是你的代码,更新播放器的位置。 您必须使用增量编号。

public void update(GameContainer gc, int delta) 

正如你所看到的delta是一个预定义的整数。增量包含两次更新之间传递的时间。所以在这之后,你应该把所有东西都与delta相乘。

检查:

player_X += velocityX * delta; 
player_Y += velocityY * delta; 

// The '+=' means player_X = player_X + something (if you did not know) 

注:

player_X += velocityX * delta * 1.5f; 
player_Y += velocityY * delta * 1.5f; 

例子:如果玩家在变更后移动缓慢,然后只需用一些像这样乘以:

The Runnable Jar
MainComponent.java
GameState.java

这是给你一个自制的快速和简单的例子。尝试一下,品尝源代码:D
哦,这个距离计算方法会让玩家摇摇欲坠。

+0

很酷,它确实摆脱了缓慢的运动,但它会扰乱运动代码,类似于您的问题,它不会移动到适当的位置。 – 2013-04-11 16:31:58

+0

我给你加了一个例子 – HUNeater 2013-04-11 17:36:47

+0

Yay!最后在使用你在示例中提供的代码之后得到了它,并且我固定了该单元几乎没有错过它的目标。 – 2013-04-11 19:25:30