10.07.2009, 19:35
общий
это ответ
Здравствуйте, sergion-aa.
Уроки идут по порядку, и автор объясняет только новые строки кода. Объяснение приводится в первом уроке (http://pmg.org.ru/nehe/nehe01.htm):
Если произошло нажатие кнопки (на клавиатуре) мы можем узнать какая клавиша это была считав wParam. Тогда я делаю, чтобы эта ячейка в массиве keys[ ] содержала true. Таким образом, я могу считать этот массив позже и найти какая клавиша была нажата. Это позволяет отследить нажатия сразу несколько клавиш одновременно.
case WM_KEYDOWN: // Была ли нажата кнопка?
{
keys[wParam] = true; // Если так, мы присваиваем этой ячейке true
return 0; // Возвращаемся
}
Если кнопка была отпущена мы можем узнать какая клавиша это была считав wParam. Тогда мы делаем, чтобы эта ячейка в массиве keys[ ] была равна false. Таким образом, когда Вы считываете эту ячейку, Вы будете знать нажата ли она до сих пор или была отпущена. Другие кнопки на клавиатуре могут быть представлены в диапазоне 0-255. Когда мы нажимаем кнопку со скан-кодом 40, например, keys[40] вернёт true. Когда я её отпущу, она вернёт false. Вот так мы используем ячейки для хранения нажатых клавиш.
case WM_KEYUP: // Была ли отпущена клавиша?
{
keys[wParam] = false; // Если так, мы присваиваем этой ячейке false
return 0; // Возвращаемся
Также следует смотреть оригинал, поскольку переводы некоторых уроков от него несколько отличаются, кроме того, там можно скачать полный исходник каждого урока в конце страницы (http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=01).
Или можете реализовать по-своему (http://vsokovikov.narod.ru/New_MSDN_API/Keyb_input/notify_wm_keydown.htm), например, как-то так:
...
case WM_KEYDOWN:
{
KeyPress(wParam, lParam);
return 0;
}
...
void KeyPress(WPARAM wParam, LPARAM lParam)
{
if(wParam == VK_LEFT)
{
// ...
}
}