Перейти к содержанию

Лидеры

Популярный контент

Показан контент с высокой репутацией 26.03.2015 во всех областях

  1. Карочи! Ты такой: int flag = 0; /* объявляем флажок */ if ( GetAsyncKeyState(0x20) & 0x8000 && !flag ) { /* Если кнопка в нижнем положении и флажок == 0 */ flag = 1; /* Ставим флажок в 1 */ /* Выполняем нужный код */} else if ( !GetAsyncKeyState(0x20) ) { /* Иначе, если кнопка НЕ нажата */ flag = 0; /* Снимаем флажок */}Заметь, что перед 0x8000 стоит логическое И. В чем суть? В том, что функция GetAsyncKeyState возвращает значение типа SHORT. SHORT - это два байта. Младший показывает состояние кнопки (нажата - не нажата), а старший - подробности. Эти самые подробности в бинарном виде выглядят так: 0000 0000 0000 0000 // Кнопка вверху и не нажата 1000 0000 0000 0001 // Кнопку нажали и она теперь внизу 1000 0000 0000 0000 1000 0000 0000 0000 // Кнопка все еще внизу 1000 0000 0000 0000 1000 0000 0000 0000 0000 0000 0000 0000 // Кнопка отжалась обратно То же, но в 16-ричном формате: 0x0000 0x8001 0x8000 0x8000 0x8000 0x8000 0x0000 Итого: 0x0000 0x8001 OnKeyDown - нажали кнопку и держим ее так. 0x8000 ИЛИ 0x8001 OnKeyPressed - нажали и отпустили, НО предыдущяя проверка должна была вернуть 0. 0x8001 OnKeyHold - с момента предыдущей провери кнопка все еще нажата. В духе: "ABCDDDDDDDDDDD". 0x8000 ИЛИ 0x8001 0x0000 OnKeyUp - то есть кнопка отпустилась из предыдущего своего состояния. Такая вот штуковина! =D
    1 балл
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.