Вниз
Скачать: CL | DM;

прыжок в игре   Найти похожие ветки 

← →
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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.006 c
6-1177413145
DVM
2007-04-24 15:12
2008.01.06
Почему начинает подтормаживать сервер.


2-1197145437
sdaf
2007-12-08 23:23
2008.01.06
Edit


2-1196941670
Nil
2007-12-06 14:47
2008.01.06
распределение памяти в динмаическом массиве записей


2-1197122180
ab99
2007-12-08 16:56
2008.01.06
Ord - не могу сообразить, как выводить ASCII коды


15-1196672711
Kerk
2007-12-03 12:05
2008.01.06
Одно и то же в разных источниках




   Наверх