【问题标题】:How do I maintain movement speed with a server?如何保持服务器的移动速度?
【发布时间】:2012-05-29 00:40:15
【问题描述】:

我正在为我的游戏编写服务器,但不知道如何保持移动速度。根据计算机上运行的内容,移动速度要么非常快,要么非常慢。我已经尝试为服务器创建自己的 delta 方法,但它不起作用。我不能在更新时使用 Slick delta 变量,因为服务器是使用 AWT 和 Kryonet 编程的。

有人知道如何保持运动吗?

【问题讨论】:

  • 你对游戏中的时间有什么概念吗?也许事件都发生在特定的时间,即使你的服务器在 200 毫秒内没有处理事件,当事件发生在游戏“内部”时它也不会改变......
  • 你能扩展一下吗:“但它不起作用”
  • 客户端有时间的概念,但没有用到,因为移动是通过服务器完成的。我尝试创建一个更新增量的增量更新线程,但失败并始终将增量返回为 0。
  • 如果您向我们展示delta update 代码,也许我们可以帮助您完成这项工作,否则我们将无法继续解决这个问题。

标签: java awt kryonet


【解决方案1】:

您的游戏服务器需要有一个明确的全球时间。我建议使用 System.currentTimeMillis();

然后,您必须根据基于时间的方程来确定运动。由于您机器上的循环不会以准确的速率执行,因此您需要使用 System.currentTimeMillis() 从上一个时间值中减去来获得通过的增量时间。在您的运动方程式中使用该值以获得一致的运动外观。如果您正在计算物理(即运动),则需要使用 Runge Kutta 4 阶方程,而不是正常的欧拉方程(欧拉会随着时间的推移计算误差)。

其他有用的链接:

http://gafferongames.com/game-physics/integration-basics/

https://developer.valvesoftware.com/wiki/Latency_Compensating_Methods_in_Client/Server_In-game_Protocol_Design_and_Optimization

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-21
    • 1970-01-01
    • 2020-02-02
    • 1970-01-01
    • 1970-01-01
    • 2014-11-04
    • 1970-01-01
    • 2013-01-26
    相关资源
    最近更新 更多