Создание игры с помощью OpenGL/GLUT и C++.
Я слышал, что самый простой способ управлять клавиатурой в GLUT — это использовать массив логических значений.
Итак, в основном, вот что у меня есть:
bool* keys = new bool[256];
...
void keyDown(unsigned char ch, int x, int y)
{
keys[ch] = true;
}
void keyUp(unsigned char ch, int x, int y)
{
keys[ch] = false;
}
Затем, если я хочу узнать состояние ключа, я просто возвращаю keys[key].
У меня есть аналогичная настройка для специальных клавиш. Теперь у меня в игре при смерти сбрасывает все значения, которые нужно сбросить и запускает игру заново. До сих пор это включало
keys = new bool[256];
и аналогичное объявление для массива специальных ключей. Что для меня не имеет смысла, так это то, что иногда этот предполагаемый сброс массивов приводит к тому, что некоторые или все значения в ключах становятся двух- или трехзначными целыми числами (поэтому всегда оценивается значение true и заставляет персонажа игрока неконтролируемо двигаться до тех пор, пока один или больше клавиш, которые явно были нажаты, были нажаты). У меня есть подозрение, что это произошло из-за того, что во время эндшпиля одна из клавиш была нажата, тем самым сбивая с толку C++, когда он пытался сделать весь массив ложным и обнаружил, что одна вещь застряла в истине.
Чувак, это сбивает с толку. Насколько я вижу, проблема была решена за счет устранения всех лишних инициализаций ключей. Но я не понимаю. У кого-нибудь есть идеи о том, как мне удалось превратить некоторые логические значения в целые?