Клавиатурный ввод в играх (для GLUT) - PullRequest
3 голосов
/ 22 июля 2010

Почти в каждой игре клавиатура используется для ввода.Я искал 2 дня на эту тему и нашел довольно много об этом.Клавиатура имеет много недостатков, но основные проблемы, которые я обнаружил, - это разные раскладки. Во-вторых, если вы одновременно нажимаете 3 клавиши, это может привести к повреждению (ошибка строки-столбца).Если вы не знаете, о чем я говорю, клавиатура выполнена в виде сетки, и она проверяет, какие строки и столбцы соединились.Но если вы нажмете E, D (строка 1,2 столбца 3) и R (строка 1, столбец 4), клавиатура может показать даже F, потому что она обнаружила, что она нажата (строка 2, столбец 4 оба нажаты).

Так что я думаю, что мы ничего не можем поделать с этой секундой, но если у кого-то появится идея, как решить ее лучше, чем использовать ключи, которые не образуют L, я был бы рад:)

Но моя главная проблема - это разные раскладки клавиатуры, что очень больно.Я словацкий, так что словацкая раскладка чисел выглядит так: + ľščťžýáíé и со смещением 1234567890, мы также получили QWERTZ, но вы можете использовать QWERTY.Вы все знаете, как выглядит английский, но точно: 1234567890 и shift! @ # $% ^ & * ()

Большую часть времени я использую английский, потому что привык к нему при программировании.Во всяком случае, есть разные люди, использующие разные макеты.Когда вы создаете игру, которая зависит от того, какая клавиша нажата, например, от старого доброго паттерна WASD, вы не можете использовать его на французском языке, который представляет собой макет AZERTY.Это было бы странно.То же, что использование чисел для выбора оружия в боевике.Как вы можете видеть, словацу придется нажать shift, чтобы заставить его работать.

Я также использую OpeGL.Существует проблема, когда вы отображаете, какие клавиши нажаты.Например, широко используемое решение для составления карты из 256 бул для каждого персонажа, страдающего сдвигом.Вы нажимаете, SHIFT и отпускаете, у вас есть: вниз, вверх.Поэтому я подумал о том, чтобы связать вместе несколько ключей, таких как A и a, 1 и!, Но потом я понял, что просто поменяю раскладку, и все не так.

Так, каково решение для этого?Я думаю, что есть кто-то, кто занимается игровой индустрией или создал какую-то игру и должен был это решить.Единственное решение, которое приходит мне в голову, - это заставить английский макет для пользовательского интерфейса (и выбрать макет для чата).

После следующего поиска я нашел то, что мне нужно, но мне нужен кроссплатформенный: коды виртуальных клавиш

И обнаружен следующий поиск Ключ SDL

Результат: Никогда не начинать сGLUT, если вы собираетесь делать игры, используйте SFML или SDL

Спасибо всем за помощь, было больше проблем в этом, так что идея связывания / сопоставления ключей, SDL и т. Д.каждый помог мне много.

Ответы [ 5 ]

2 голосов
/ 23 июля 2010

Если вы получаете «персонаж» каждый раз, когда пользователь что-то нажимает, тогда ваши клавиатурные процедуры не подходят для ввода игры - только для ввода текста.

Вам необходимо использовать процедуры ввода, которые полностью игнорируютпереключение раскладки клавиатуры и работа с некими необработанными кодами клавиш (поэтому, когда пользователь нажимает клавиши shift + a, вы будете знать, что нажата клавиша shift и что нажата клавиша «a», но вы не получите символ «A»).Кроме того, подпрограммы должны позволять вам запрашивать, нажата ли клавиша или нет.

Для окон это DirectInput или XInput.Для кроссплатформенного это libsdl и SDL_GetKeyState .И вам нужно будет предоставить опции сопоставления клавиш для пользователя.Переизбыток, вероятно, не подходит для вашей задачи.

1 голос
/ 23 июля 2010

Прежде всего, отделите нажатия клавиш от ввода текста. Вас не должно волновать, какая буква или цифра появляются, когда вы нажимаете клавишу со смещением, - операционная система должна обработать это и сгенерировать событие, которое вы можете использовать в тех редких случаях, когда вам нужен текст. Как правило, вам нужно просто искать нажатие клавиш и любые смены и действовать в соответствии с ними.

Во-вторых, загружайте привязки из ключей к командам из файла данных, а не жестко кодируйте его. Распределите привязки по умолчанию для QWERTY и любой макет по умолчанию, который у вас есть. Если формат данных довольно прост, то люди не будут возражать против его настройки в соответствии с их клавиатурой и предпочтениями. Вы также можете добавить внутриигровой редактор связывания клавиш позже.

Это на самом деле не касается OpenGL, так как по умолчанию это не касается нажатий клавиш. Возможно, вы используете аддонную библиотеку или расширение, которое обрабатывает ключи для вас - убедитесь, что все, что вы используете, может дать вам индивидуальные значения ключей и состояние shift / alt / ctrl независимо, а также обеспечивает ввод текста через независимую систему. .

1 голос
/ 22 июля 2010

Общий подход, кажется, игнорирует проблему. Хуже-лучше на ранней стадии.

К сожалению, я использую svorak раскладку клавиатуры, поэтому она действительно не работает для меня.

Я подходил к этой же проблеме, связывая несколько клавиш на клавиатуре. Так что игрок прыгает с клавиш x и j. Это не очень хорошо в чем-то, что не похоже на игру типа «стреляй-прыгай».

Хорошая вещь была бы, если бы вы могли найти строку / столбец или какой-нибудь интерфейс рядом с драйвером для вашей клавиатуры.

Некоторые программы для автоматической настройки клавиатуры были бы хороши, хотя я еще не видел ничего подобного. Может быть, мы должны написать один?

0 голосов
/ 22 июля 2010

Превратите ввод с клавиатуры в метаданные, чтобы вы могли позволить пользователям настраивать их по своему желанию, а также предоставлять различные сочетания клавиш в зависимости от раскладки клавиатуры, используемой в файле конфигурации.

0 голосов
/ 22 июля 2010

Позвольте вашим пользователям определять ключи, которые будут использоваться для каждого действия ...

или используйте клавиши со стрелками .. это должно быть довольно универсальным:)

...