虽然在我的游戏中它看起来很有趣,但我有一些基本的rts动作,你右键点击并且单位移动到那里。但有时候当我运行游戏时,单位的移动速度比正常速度慢得多,但代码中没有任何变化(有时单位移动的速度要快得多)。当我打开更多程序时,速度恢复正常,但如果我只是运行Netbeans,我会变得超级缓慢。
我觉得它与delta值(不太确定)有关,但是由于我是slick2d的新手,我不知道从哪里开始修复问题。
所以我的问题是,我可以限制delta值,使其更新速度太慢或太快,即使是我的问题也是delta?
http://pastebin.com/fRndGE2p //主要课程
http://pastebin.com/KJ8W3134 // PlayerStats
答案 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;
示例:强> 的
这是一个自制快速简单的例子。尝试一下,品尝源代码:D
哦,这种距离计算方法会让玩家感到不稳定。