Конференция "Игры" » Процедура обработки двух клавиш
 
  • snake-as © (10.01.08 17:26) [0]
    Здравствуйте, эксперты.. Помогите мне, пожалуйста, с таким вопросом. Вот сейчас пишу игру и столкнулся с проблемой, что не могу обработать нажатие двух клавиш. Скажите, пожалуйста, что можно сделать..
  • @!!ex © (10.01.08 17:39) [1]
    GetAsyncKeyState
  • @!!ex © (10.01.08 17:42) [2]
    OldKeys:array[0..255] of Smallint;
    keys : array[-1..255] of boolean;

    procedure TKeys.Update;
    var
     Index:integer;
     Key:Smallint;
    begin
     for Index:=0 to 255 do begin
       Key:=GetAsyncKeyState(Index);
       if Key And $8000<> OldKeys[Index] And $8000 then  begin
         Keys[Index]:=(Key And $8000)<>0;
         OldKeys[Index]:=Key;
       end;
     end;
    end;
    end;



    Код успешно применяется в нескольких реальных проектах.
  • snake-as © (11.01.08 13:42) [3]
    Я не понял немного.. Может я ламер последний.. Не могли бы вы с комментариями этот код написать? Буду очень признателен..
  • @!!ex © (11.01.08 14:16) [4]
    > [3] snake-as ©   (11.01.08 13:42)

    Че не понятно? Спрашивай. Комментариев просто так писать не буду. Код попадает под документацию.
  • snake-as © (11.01.08 16:57) [5]
    Что значит $8000, точнее логическое умножение с ним?
  • Dib@zol © (11.01.08 17:35) [6]
    > Что значит $8000, точнее логическое умножение с ним?

    Получение состояния шестнадцатого, сиречь старшего, бита в двухбайтной переменной. Он, как можно понять из справки по GetAsyncKeyState, определяет состояние нажатия клавиши: 0=отпущена, 1=нажата. Кстати, вместо катавасии с битами, для получения состояния можно использовать тот факт, что этот старший разряд определяет знак числа, а тип SmallInt - знаковый. => Если клавиша нажата, переменная Key принимает отрицательное значение.
  • @!!ex © (11.01.08 17:37) [7]
    > [6] Dib@zol ©   (11.01.08 17:35)

    -0? :)
  • Dib@zol © (11.01.08 17:51) [8]
    > -0? :)

    если ты про число 1000000000000000b, то отвечаю, что отрицательные числа в знаковых переменных интерпретируются компом в так называемых обратных дополнительных кодах. То есть, 0FFFFh = 1111111111111111b означает минус один, 0FFFЕh - минус два, итд. Отсюда, числу 8000h = 1000000000000000b будет соответствовать не "минус ноль", а минимально возможное для данного типа число: -32768.
  • @!!ex © (11.01.08 18:01) [9]
    > [8] Dib@zol ©   (11.01.08 17:51)

    Да шучу я. Расслабься.
  • snake-as © (13.01.08 06:00) [10]
    Да, теперь все понятно:)
  • имя (20.10.15 19:58) [11]
    Удалено модератором
 
Конференция "Игры" » Процедура обработки двух клавиш
Есть новые Нет новых   [134427   +37][b:0][p:0.001]