-
Здравствуйте, эксперты.. Помогите мне, пожалуйста, с таким вопросом. Вот сейчас пишу игру и столкнулся с проблемой, что не могу обработать нажатие двух клавиш. Скажите, пожалуйста, что можно сделать..
-
GetAsyncKeyState
-
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; Код успешно применяется в нескольких реальных проектах.
-
Я не понял немного.. Может я ламер последний.. Не могли бы вы с комментариями этот код написать? Буду очень признателен..
-
> [3] snake-as © (11.01.08 13:42)
Че не понятно? Спрашивай. Комментариев просто так писать не буду. Код попадает под документацию.
-
Что значит $8000, точнее логическое умножение с ним?
-
> Что значит $8000, точнее логическое умножение с ним?
Получение состояния шестнадцатого, сиречь старшего, бита в двухбайтной переменной. Он, как можно понять из справки по GetAsyncKeyState, определяет состояние нажатия клавиши: 0=отпущена, 1=нажата. Кстати, вместо катавасии с битами, для получения состояния можно использовать тот факт, что этот старший разряд определяет знак числа, а тип SmallInt - знаковый. => Если клавиша нажата, переменная Key принимает отрицательное значение.
-
> [6] Dib@zol © (11.01.08 17:35)
-0? :)
-
> -0? :)
если ты про число 1000000000000000b, то отвечаю, что отрицательные числа в знаковых переменных интерпретируются компом в так называемых обратных дополнительных кодах. То есть, 0FFFFh = 1111111111111111b означает минус один, 0FFFЕh - минус два, итд. Отсюда, числу 8000h = 1000000000000000b будет соответствовать не "минус ноль", а минимально возможное для данного типа число: -32768.
-
> [8] Dib@zol © (11.01.08 17:51)
Да шучу я. Расслабься.
-
Да, теперь все понятно:)
-
Удалено модератором
|