11.08.2014 / 18:59 | |
AHiLLA Пользователь Сейчас: Offline
Имя: Али Откуда: Махачкала Регистрация: 19.01.2010
| SeTSeR, Это не то. Если оставить только одну часть этого кода, то и без перерисовки работает. А это один цикл, поэтому значение одновременно и прибавляется и убавляется, и стоит на месте, не меняясь
|
11.08.2014 / 19:10 | |
SeTSeR Пользователь Сейчас: Offline
Имя: Сергей Откуда: Где-то возле Москвы Регистрация: 01.07.2012
| AHiLLA, разбей на два цикла, цикл подъёма и цикл спуска.
|
11.08.2014 / 19:18 | |
AHiLLA Пользователь Сейчас: Offline
Имя: Али Откуда: Махачкала Регистрация: 19.01.2010
| SeTSeR, Все-таки так я не вкуриваю, я только начинаю МП юзать
|
11.08.2014 / 19:33 | |
SeTSeR Пользователь Сейчас: Offline
Имя: Сергей Откуда: Где-то возле Москвы Регистрация: 01.07.2012
| procedure jump;
begin
for i:=1 to 10 do
y:=y-2;
repaint;
end;
for i2:=1 to 10 do
y:=y+2;
repaint;
end;
Вотъ Изменено SeTSeR (11.08 / 19:34) (всего 1 раз) |
11.08.2014 / 20:10 | |
Kalter Пользователь Сейчас: Offline
Имя: Гриб Откуда: Оренбург - Нежинка Регистрация: 16.10.2013
| SeTSeR, не думаю, что такое кто-то будет использовать в играх. Вот прыжок на несложном примере: program jump;
var
x,y:integer; //координаты
jmp:boolean; //состояние прыжка
jmps:integer; //счётчик для прыжка
//инициализация приложения перед запуском
procedure init;
begin
x:=(240+16)/2;
y:=320-32;
jmp:=false;
jmps:=0;
end;
//отрисовка нашего малого и фона
procedure draw;
begin
//рисуем фон
setcolor(255,255,255);
fillrect(0,0,240,320);
//рисуем нашего малого
setcolor(0,0,0);
fillrect(x,y,16,32);
end;
//здесь проверяем нажатые кнопки
procedure keypressed;
var
key:integer;
begin
key:=getkeypressed;
if key=ke_key4 then begin x:=x-2; exit; end;
if key=ke_key6 then begin x:=x+2; exit; end;
key:=getkeyclicked;
if key=ke_key2 then
begin
jmp:=true; //активируем прыжок
jmps:=0; //онулируем счётчик прыжка
end;
end;
//контроль физики (в нашем случае прыжком)
procedure phyctrl;
begin
if jmp then //если надо прыгать
begin
y:=y-4;
jmps:=jmps+1;
if jmps>5 then jmp:=false;//если уже достаточно прыгнули, то перестаём прыгать
end
else //а если мы не прыгаем
begin
y:=y+2;
if (y+32)>320 then y:=y-2; //не выходим за пределы экрана
end;
end;
begin
init;
//игровой цикл
repeat
draw;
keypressed;
phyctrl;
repaint;
delay(1);
until false;
end.
__________________
Homo homini penis est. |
11.08.2014 / 21:42 | |
RblSb Пользователь Сейчас: Offline
Регистрация: 25.07.2011
| Kalter, Про векторы движения слышал? Скорость по х/у лучше выделять в отдельные переменные и уже ими управлять через клавиши Пример: x,y,iner,usk: integer key: integer jump: boolean
if key=GA_FIRE then jump:=true; if jump then begin usk:=usk-10; jump:=false; end; usk:=usk+1; //притяжение вниз x:=x+iner; y:=y+usk; if usk<>0 then usk:=usk-abs(usk)/usk; //вычитаем единицу если больше нуля, добавляем единицу если меньше //то же с iner
Изменено RblSb (11.08 / 21:53) (всего 2 раза) |
12.08.2014 / 12:29 | |
AHiLLA Пользователь Сейчас: Offline
Имя: Али Откуда: Махачкала Регистрация: 19.01.2010
| Kalter, RblSb, Спасибо Только я не понял, что это значит if key=ke_key4 then begin x:=x-2; exit; end; |
12.08.2014 / 12:43 | |
SeTSeR Пользователь Сейчас: Offline
Имя: Сергей Откуда: Где-то возле Москвы Регистрация: 01.07.2012
| AHiLLA, выход из приложения
|
12.08.2014 / 12:44 | |
AHiLLA Пользователь Сейчас: Offline
Имя: Али Откуда: Махачкала Регистрация: 19.01.2010
| SeTSeR, А зачем там выход, если просто перемещаешь персонажа? Я чето не вкуриваю |
12.08.2014 / 14:48 | |
HoldFast Пользователь Сейчас: Offline
Имя: Андрей Откуда: Великие Луки Регистрация: 18.04.2011
| выход же halt; вроде
__________________
Да, детка, я - Король Ящериц!!! Изменено HoldFast (12.08 / 14:49) (всего 1 раз) |