【发布时间】:2010-10-24 07:26:56
【问题描述】:
In a related question I asked how to get input via IUP。这工作得很好,除了它通过系统,并且受制于对游戏来说不是最佳的重复率。我真正想要的是在给定时间获得任何键的当前状态的能力。有没有办法做到这一点(通过 IUP 或其他方式)?
【问题讨论】:
标签: asynchronous input lua
In a related question I asked how to get input via IUP。这工作得很好,除了它通过系统,并且受制于对游戏来说不是最佳的重复率。我真正想要的是在给定时间获得任何键的当前状态的能力。有没有办法做到这一点(通过 IUP 或其他方式)?
【问题讨论】:
标签: asynchronous input lua
您可能需要包装对适当 Win32 API、DirectX 或 lua 模块中的任何内容的调用。在 IUP 中捕捉击键事件需要通过“正常”的 Windows 消息机制传递到窗口或控件,这可能不是游戏框架中的最佳方法。
您可以使用 IUP 计时器对象按计划运行重绘,但您仍然需要一种方法来收集键盘状态。如果您想使用游戏手柄、操纵杆或键盘和鼠标以外的任何 HID,那么 IUP 在任何情况下都不会直接提供帮助。
只需将少量 C 代码编译为 DLL,即可轻松完成。
对于某些类型的 API,使用 SWIG 可以轻松完成。其他人将进行足够的设置/拆卸工作,以使手工包装更容易。
还有用于 Lua 的 Alien 模块,它允许从纯 Lua 直接调用任意 API。 Alien 包含在 Lua for Windows 的一部分中,以及通过其在 Luaforge 的项目页面。 Alien 本身甚至可以在一定程度上跨平台移植,尽管你不会用它来调用它。
当您沿着这条路走时,还需要注意一个或多个现有游戏引擎。通常,它们将事件循环隐藏在引擎内部(IUP 也是如此),但它们针对游戏构建而非桌面应用程序进行了优化。
我在 Lua 邮件列表中听到了一些传闻。因为经常提到它而想到的一个是LÖVE。
【讨论】: