Форум: "Игры";
Текущий архив: 2008.01.06;
Скачать: [xml.tar.bz2];
Внизпрыжок в игре Найти похожие ветки
← →
nordic3 (2006-11-29 18:21) [0]Делаю игру, что-то типа Марио.
Координаты человечка: х и у.
Когда нажимаю в сторону, то меняется х, а когда вверх, то запускается таймер, где постепенно меняется координата у.
Ожидаемый эффект: жмешь вперед; не отпуская, нажимаешь вверх; должен лететь на искосок.
Получается: жмешь вперед; не отпуская, нажимаешь вверх; летит прямо вверх, вообще не замечает нажатую клавишу вперед.
Как избежать этого?
Предполагаю, что стоит все время проверять нажата ли кнопка, но как это сделать? Или может есть другой вариант?
← →
XProger © (2006-11-29 18:49) [1]Есть такое понятие в физике - скорость. Вот в зависимости от неё и должен передвигаться объект...
← →
Pa5ha © (2006-11-29 20:05) [2]
function IsKeyDown(c : Char) : Boolean;
var
vk : Integer;
begin
// "$FF" filters out translators like Shift, Ctrl, Alt
vk:=VkKeyScan(c) and $FF;
if vk<>$FF then
Result:=(GetAsyncKeyState(vk)<0)
else Result:=False;
end;
// IsKeyDown
//
function IsKeyDown(vk : TVirtualKeyCode) : Boolean;
begin
Result:=(GetAsyncKeyState(vk)<>0);
end;
// KeyPressed
//
function KeyPressed(minVkCode : TVirtualKeyCode = 0) : TVirtualKeyCode;
var
i : Integer;
buf : TKeyboardState;
begin
Assert(minVkCode>=0);
Result:=-1;
if GetKeyboardState(buf) then begin
for i:=minVkCode to High(buf) do begin
if (buf[i] and $80)<>0 then begin
Result:=i;
Break;
end;
end;
end;
end;
← →
Pa5ha © (2006-11-29 20:05) [3]Это иззз демки ODE sulaco. Модуль keyboard.pas
← →
megabyte-ceercop © (2006-11-30 08:30) [4]
> XProger
Правильно написал. Все проблемы с прыжками и правильным перемещением пропадут, если герою добавить два свойства - скорость по оси X и скорость по оси Y.
Xspeed := 0;
If KeyLeft then Xspeed := -3; //Меняем горизонтальную скорость в зависимости от клавиш.
If KeyRight then Xspeed := 3;
If (KeyJump and HeroOnGround ) then Yspeed := -15; //Если герой на
//земле и нажата кнопка прыжок - даем ускорение вверх с силой -15
If (not HeroOnGround) then Yspeed := Yspeed + 2; //пока в воздухе - на вертикальную скорость воздействует гравитация.
//В конце всегда приращиваем скорость к координатам (скорость влияет на положение героя.)
X := X + Xspeed;
Y := Y + Yspeed;
← →
megabyte-ceercop © (2006-11-30 08:33) [5]А еще стандартное событие onKeyPress возвращает только последнюю клавишу. Используй onKeyDown и onKeyUp для определения нажима о тжима клавиш. Состояние нужных тебе клавиш запоминай. Возможно проблема в этом.
← →
Pa5ha © (2006-11-30 17:28) [6]Лучше не запоминать нажатия клавиш, а проверять непосредственно, когда нужно ибо очередь клавы... XProger лучше объяснит -)
Страницы: 1 вся ветка
Форум: "Игры";
Текущий архив: 2008.01.06;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.004 c