例如使用JavaSlick2D或.NETXNA框架时,用户输入如何保持独立于FPS?

例如使用JavaSlick2D或.NETXNA框架时,用户输入如何保持独立于FPS?,java,.net,xna,2d,Java,.net,Xna,2d,过去我曾使用LWJGL(带有光滑的2D包装器)和XNA框架等库编写过一些2D游戏,但有一件事我一直无法理解(或需要理解),那就是用户输入如何保持恒定,eq不依赖于FPS 我正在寻找一个更通用的答案,而不是特定于框架的答案。我知道这与帧更新之间测量的时间有关 谢谢我不能代表其他一些框架发言,但我知道XNA基本上允许您随时轮询当前输入状态(按钮是向上还是向下?)。你通常每帧都做 这意味着,如果你的玩家恰好是一名忍者,并且能够以60帧/秒以上的速度击键,那么他们可能会在轮询之间击键(或鼠标键),而你却

过去我曾使用LWJGL(带有光滑的2D包装器)和XNA框架等库编写过一些2D游戏,但有一件事我一直无法理解(或需要理解),那就是用户输入如何保持恒定,eq不依赖于FPS

我正在寻找一个更通用的答案,而不是特定于框架的答案。我知道这与帧更新之间测量的时间有关


谢谢

我不能代表其他一些框架发言,但我知道XNA基本上允许您随时轮询当前输入状态(按钮是向上还是向下?)。你通常每帧都做

这意味着,如果你的玩家恰好是一名忍者,并且能够以60帧/秒以上的速度击键,那么他们可能会在轮询之间击键(或鼠标键),而你却错过了。实际上,这几乎从来都不是一个问题

如果确实让您感到困扰,解决此问题的方法是挂接Windows消息泵并接收键盘上/下事件

对于一般的游戏来说,这真的不值得付出努力。通常,只有在用户键入文本时,才需要捕获每个击键。因此,您可以捕获角色事件(
WM_CHAR
),而不是捕获键向上/向下事件。这意味着您不会错过按键。但这解决的更重要的问题是,它将按键到字符的转换卸载到Windows—允许它为您处理按键重复、键盘布局、移动字符等—允许您的游戏像任何其他Windows应用程序一样运行

(当然,如果您可以不使用基于轮询的框架输入内容,那么就这样做吧,它更容易实现,并且不太特定于平台。)


以上仅在您检测到不同的按键(例如:轻按以发射此枪)时起作用,而不是按住按键(例如:加速此车辆)

对你的问题的另一种解释是,你是在暗示一个关键点可能会出现在画面的一半——在一个具有离散时间步长的游戏中,你如何解释这一点

一般来说,你不必担心。正如每秒60帧的速度足够快,可以离散地计算游戏状态,并且对人来说是平滑和连续的,它也足够快,可以接受输入

但是如果你不是以每分钟60帧的速度跑步,会发生什么呢?如果你以30帧/秒的速度运行(就像你在移动平台上一样),那么如果你以60帧/秒的速度进行投票,它可以让你的输入——特别是模拟输入——感觉更加流畅。要做到这一点,最简单的方法是只需为每个
绘图执行两次
更新
——如果您的更新不会对CPU造成太大负担的话