Почему мой стек DirectInput8 переполняется? - PullRequest
5 голосов
/ 15 апреля 2011

Общая программа слишком сложна для отображения здесь. В основном, просто обратите внимание на зеленые выделения в моем недавнем коммите git . Я очень новичок в DirectInput, поэтому я ожидаю, что сделал несколько ошибок. Я очень внимательно изучил документацию MSDN, поэтому обещаю, что я не просто добавлю это и напишу на нем FIX IT FOR ME. :)

По сути, я думаю, что сузил свою проблему до области кода вокруг Engine :: getEvent (строка 238+). Я не понимаю, как работают эти функции, и я перепутал некоторые части для достижения разных результатов. Моя цель здесь состоит в том, чтобы просто читать события клавиатуры напрямую и выводить эти необработанные числа на экран (о значениях чисел я расскажу позже). Проблема здесь связана с KEYBOARD_BUFFER_SIZE. Если я сделаю его маленьким, программа, кажется, работает нормально, но не выводит никаких событий. Если я увеличу его, он будет работать немного лучше, но он начнет замедляться, а затем зависать (у окна OpenGL просто вращающийся цветной куб). Как правильно захватить события клавиатуры?

Я проверил возвращаемые значения на всех шагах настройки выше в коде. Все они возвращают DI_OK просто отлично.

1 Ответ

2 голосов
/ 15 апреля 2011

Ваш код, кажется, в порядке (в соответствии с этого руководства, которое я использовал в прошлом ).Использование нескольких основанных на стеке массивов сомнительно, но это не должно быть слишком большой проблемой (если только вы не начинаете выполнять много одновременных вызовов getEvent).

Однако ваша лучшая ставка будет прекратите использовать DirectInput и начните использовать Windows Raw Input .Лучше сделать это переключение рано (т.е. сейчас), а не осознавать, что вам действительно нужно использовать что-то другое, кроме DI, чтобы получить желаемые результаты.

...