Играм необходим низкоуровневый доступ к вводу с клавиатуры.В Windows есть DirectInput.Но какую технологию используют разработчики игр для Mac OS X?
Очевидно, что для Mac достаточно игр, которые правильно вводят данные с клавиатуры, без недостатков общеизвестных решений:
Решение №1: Использование событий keyUp / keyDown
-(void)keyUp:(NSEvent*)event;
-(void)keyDown:(NSEvent*)event;
Недопустимый недостаток: События keyDown повторяются на основе настроек системы для параметров «Скорость повторения ключа» и «Задержка повторения ключа».Это вызывает начальное событие keyDown, за которым следует пауза, прежде чем оно начнет повторяться со скоростью, определенной настройкой системы.Это решение не может быть использовано для непрерывных событий клавиш.
Интересно, можно ли отключить поведение повтора клавиш?Я полагаю, что вы могли бы прочитать первый ключ keyDown, а затем запомнить состояние «ключ с ключом x выключен» в вашем классе, пока для этого ключа не будет получено событие keyUp, что позволит обойти проблемы задержки и повторения.
Решение № 2: Использование отводов событий Quarts
См. Справочник по службам Quartz Event * .Кажется, он достаточно низкого уровня.
Недопустимый недостаток: требует, чтобы вспомогательные устройства были включены в системных настройках в разделе «Универсальный доступ - Клавиатура».Хотя это может быть включено по умолчанию, нет гарантии, что оно может быть отключено в некоторых системах.
Я также читал, что для прослушивания событий Quartz требуется, чтобы приложение запускалось от имени пользователя root, но не нашел подтверждения для этого.
Решение № 3: Carbon Events / IOKit HID
Справочник Carbon Event Manager помечен как устаревший и долженне будет использоваться для новых разработок.
Недопустимый недостаток: никто не знает, как долго события Carbon будут продолжать поддерживаться в будущих версиях Mac OS.
Помимо CarbonБудучи устаревшей платформой, это все еще кажется лучшим решением.Но есть ли другие недостатки в использовании Carbon Events?
Вопросы:
Какую технологию используют разработчики игр для Mac OS X для получения низкоуровневых событий ввода с клавиатуры?Если они используют одну из вышеуказанных технологий, как они обходят упомянутые мною недостатки?
ОБНОВЛЕНИЕ:
Я в конечном итоге обратился к использованию обычных сообщений NSEvent и завернул ихих в аккуратном API для опроса состояний клавиатуры .