Асинхронный ввод в Lua - PullRequest
1 голос
/ 07 мая 2009

В связанном вопросе я спросил, как получить ввод через IUP . Это прекрасно работает, за исключением того, что оно проходит через систему и зависит от скорости повторного воспроизведения, которая не является оптимальной для игры. Что мне действительно хотелось бы, так это возможность получить текущее состояние любого ключа в данный момент времени. Есть ли способ сделать это (через IUP или иным образом)?

1 Ответ

1 голос
/ 07 мая 2009

Вам, вероятно, понадобится заключить вызовы в соответствующий Win32 API, DirectX или что-то еще в модуле lua. Для отлова событий нажатия клавиш в IUP требуется, чтобы они доставлялись в окно или элемент управления через «обычный» механизм сообщений Windows, и, вероятно, это не лучший подход в игровой среде.

Вы можете использовать объект таймера IUP для запуска перерисовки по расписанию, но вам все еще нужен способ для сбора состояния клавиатуры. Если вы хотите использовать геймпад, джойстик или любой другой HID, кроме клавиатуры и мыши, то IUP не поможет напрямую в любом случае.

Это легко сделать с помощью небольшого количества кода на C, скомпилированного в DLL.

Это может быть сделано довольно легко с SWIG , для некоторых видов API. Другие возьмут на себя достаточно работы по настройке / демонтажу, чтобы легче было просто изготовить упаковку вручную.

Существует также модуль Alien для Lua, который позволяет прямые вызовы в произвольные API из чистого Lua. Alien включен в состав Lua для Windows , а также через страницу проекта Luaforge. Сам по себе Alien даже несколько переносим между платформами, хотя с ним ничего нельзя было бы назвать.

Что-то еще, на что следует обратить внимание, когда вы будете следовать по этому пути, - это один или несколько существующих игровых движков. Обычно они скрывают цикл событий внутри движка (как и IUP), но они оптимизированы для построения игр, а не для настольных приложений.

Есть номер, о котором я слышал слухи в списке рассылки Lua. Тот, который приходит на ум, потому что он упоминается довольно часто, это LÖVE .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...