如何处理用户界面和游戏的input

所以我最初只是把我的input系统设置成只考虑游戏部分。 它监听键入/closures事件,将键标记为按下/未按下,然后当下一次更新到来时,它将发出状态,并将当前状态标记为之前的状态。

当我开始实现更复杂的UI元素时,我意识到这是一个问题。 文本框想要被通知重复的keydown事件,所以你可以按住一个键,滚动条想要重复的鼠标下降事件等。另一方面,游戏只想知道一个键是否closures,需要跟踪当前/以前的状态热键等。

我想要做的是find一种方法来deviseinput系统,使其适用于这两种情况。 我如何支持UI所需的重复*下拉消息,同时还保持游戏需要的当前/之前的input状态?

在我看来,我也许可以将两者分开,只使用input状态管理器来为游戏input,而直接将UI管理器挂接到键盘/鼠标input事件。 对我来说这似乎不太理想。 首先,在两个不同的地方挂钩input似乎有点草率。 此外,这样做会删除将当前/上一个input状态发送到UI的function。 我不确定这是甚至需要用户界面。 也许我只是过度devise的东西? 如果需要的话,我希望有这种能力。 其他人如何在这种情况下建立他们的input系统?

input系统没有理由处理重复事件。 你的文本input类可以保持一个计时器,如果按下键,自己重复键。 与滚动条相同。 将状态保持在关心它们的对象中,而不是将逻辑推入堆栈的较低层。

如果您想避免代码重复,则可以为GUI控件实现可重用的事件状态管理。

只需存储重复延迟(在重复input发生之前,按键/按键必须closures多长时间)和重复速率(应该随时间发送多less个重复事件)。