Проблемы с обратным вызовом клавиатуры GLUT с C - PullRequest
0 голосов
/ 23 марта 2011

В настоящее время я пишу версию Breakout как быстрый опыт изучения C и OpenGL.

У меня возникли проблемы с перемещением весла. Я установил функцию обратного вызова клавиатуры, чтобы при нажатии левой стрелки она вычитала 1 из значения x на весле и добавляла 1 к значению x при нажатии стрелки вправо.

Имея это в виду, весло движется невероятно медленно, когда я держу любую клавишу. Я могу изменить это, увеличив значение x, например, до 10. Когда я делаю это, весло, кажется, заикается по экрану, потому что оно прыгает 10 раз за раз Конечно, теперь он движется быстрее вдоль экрана, но не выглядит гладким.

Я использую GLUT для управления окнами в OSX.

Есть ли способ ускорить это и сохранить его гладким?

Ответы [ 2 ]

2 голосов
/ 23 марта 2011

Обычная вещь в играх - это клавиатура. Поэтому вы также сможете нажимать несколько кнопок одновременно.

У вас есть массив, в котором вы сохраняете состояние клавиш (вы ставите 1, когда вы нажимаете, устанавливаете 0, когда отпускаете). И вы обрабатываете игру в каждом кадре, беря информацию только из массива, а не непосредственно из ввода.

0 голосов
/ 23 марта 2011

Вот код из одного из моих проектов:

bool keyDown[256];

...

//Called when a key is pressed
void handleKeypress(unsigned char key, int x, int y) {  
    keyDown[key] = true;
}

void handleKeyUp(unsigned char key, int x, int y){
    keyDown[key] = false;
}

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

...