0

虽然在我的游戏中看起来很有趣,但我有一些基本的 rts 移动,您可以在其中单击鼠标右键,然后单位会移动到那里。但有时当我运行游戏时,单位的移动速度比平时慢得多,但代码中没有任何变化(其他时候单位移动得更快)。当我打开更多程序时,速度会恢复正常,但如果我只是运行 Netbeans,我的动作会非常慢。

我感觉它与更新的增量值(不太确定)有关,但由于我是 slick2d 的新手,我不知道从哪里开始解决问题。

所以我的问题是,我可以限制 delta 值,使其不能更新太慢或太快,并且 delta 甚至是我的问题吗?

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

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

4

1 回答 1

1

我现在明白了。你没有打开垂直同步。
注意:垂直同步将帧速率限制为显示器刷新率(通常为 60fps)。
哦,最大/最小更新间隔以毫秒为单位。

所以下面的例子让游戏变得非常迟钝:

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;

例子:

Runnable Jar
MainComponent.java
GameState.java

这是一个自制的快速简单的例子。试试看,尝尝源代码:D
哦,这个距离计算方法让玩家颤抖。

于 2013-04-11T15:10:42.223 回答