在slick2d中设置delta的最大值和最小值

时间:2013-04-09 15:45:48

标签: java slick2d

虽然在我的游戏中它看起来很有趣,但我有一些基本的rts动作,你右键点击并且单位移动到那里。但有时候当我运行游戏时,单位的移动速度比正常速度慢得多,但代码中没有任何变化(有时单位移动的速度要快得多)。当我打开更多程序时,速度恢复正常,但如果我只是运行Netbeans,我会变得超级缓慢。

我觉得它与delta值(不太确定)有关,但是由于我是slick2d的新手,我不知道从哪里开始修复问题。

所以我的问题是,我可以限制delta值,使其更新速度太慢或太快,即使是我的问题也是delta?

http://pastebin.com/fRndGE2p //主要课程

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

1 个答案:

答案 0 :(得分:1)

我现在看到了。你没有打开VSync。
注意:VSync将帧速率限制为显示器刷新率(通常为60fps)。
哦,最大/最小更新间隔是 miliseconds

因此,以下示例使游戏非常滞后:

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
哦,这种距离计算方法会让玩家感到不稳定。