Подскажите пожалуйста как можно реализовать прыжок, пытался сделать с таймером, но появилась проблема: при нажатии на прыжок включается таймер и спрайт начинает подниматься по координатам и опускаться как и надо, но если во время прыжка мы что либо нажмем программа переключается именно на это действие и появляется проблема, такая как (может бегать по воздуху). Так же использовал For тоже не добился нужного эффекта
if (key=32) and (key=39) then
for f := 0 to 39 do
begin
sleep(50);
if f>19 then
begin
y:=y-3;
x:=x-3;
end
else
begin
y:=y+3;
x:=x-3;
end; -------->не прыгает
if (key=32) then
for f := 0 to 39 do
begin
sleep(50);
if f>19 then
begin
y:=y-3;
x:=x-3;
end
else
begin
y:=y+3;
x:=x-3;
end;---------> прыгает, но если мы будем стоять на месте не нажимая "вперёд" всё равно будет прыгать с продвижение вперёд
ваше предложение на счёт проверки есть ли под нами земля или нет не пройдет так как мы двигаемся просто по координатам а не по тайлам если только не подрисовать под ноги человечеку невидимый прямоугольник, но так же надо учитывать что человечек сам не двигается т.к. реализована динамическая камера точнее говоря двигается сама карта
procedure TForm1.spriteHero(); //Прорисовка героя
begin
SpriteDvig.Draw(form1.Canvas,70,100-y,step);
end;
procedure TForm1.map(); //Прорисовка Карты
begin
for i :=0 to 10 do
begin
SpriteMap.Draw(form1.canvas,i*256+x,0,i);
end;
end;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if x<>0 then
begin //Движение влево
if key=37 then
begin
x:=x+3;
sleep(50);
if step>5 then
step:=1;
step:=step+1;
label1.Caption:=inttostr(x);
end;
end;
if key=39 then //Движение вправо
begin
x:=x-3;
sleep(50);
if (step>11)or(step<6) then
step:=7;
step:=step+1;
label1.Caption:=inttostr(x);
end;