Физическая модель прыжка (15 мин)
Это задание выходит за рамки временного интервала урока, поэтому его лучше провести отдельно.
Теперь добавим возможность прыжка. Для этого необходимо ввести еще одну переменную - ry#, а также приращение dy#:
ry# = -8
dy# = 0
Затем, вводим условие: если нажата клавиша "пробел" и робот стоит на земле (т.е. координата ry# = -8), то задаем импульс -приращение, равное 2
IF KEYDOWN(57) THEN
IF ry# = -8 THEN dy# = 2
END IF
Прибавляем к переменной ry# приращение:
ry# = ry# + dy#
Но, т. к. на робота должна действовать гравитация, мы должны периодически уменьшать приращение на 0.1:
dy# = dy# - 0.1
Причем, координата робота ry# не должна быть меньше -8 (робот не должен опускаться ниже плоскости), поэтому введем следующее условие:
IF ry# < -8 THEN ry# = -8: dy# = 0
Поменяем также фиксированную координату -8 в команде POSITIONENTITY на ry#. Измененный модуль выглядит теперь вот так:
robot = LOADANIMMESH( "C:\media\standing.3ds" )
LOADANIMSEQ robot, "C:\media\running.3ds"
SCALEENTITY robot, 0.4, 0.4, 0.4
rx# = 10
ry# = -8
rz# = 0
dy# = 0
ang = 90
REPEAT
POSITIONENTITY robot, rx#, ry#, rz#
ROTATEENTITY robot, 0, ang + 90, 0
POINTENTITY cam, robot
IF KEYDOWN(57) THEN
IF ry# = -8 THEN dy# = 2
END IF
ry# = ry# + dy#
dy# = dy# - 0.1
IF ry# < -8 THEN ry# = -8: dy# = 0
IF KEYDOWN(200)
IF ANIMSEQ(robot) = 0 THEN ANIMATE robot, 1, 0.5, 1, 10
rx# = rx# + COS(ang) * 0.5
rz# = rz# + SIN(ang) * 0.5
ELSE
IF ANIMSEQ(robot)=1 THEN ANIMATE robot, 2, 1, 0, 10
END IF
IF KEYDOWN(203) THEN ang = ang + 5
IF KEYDOWN (205) THEN ang = ang - 5
IF KEYDOWN(1) THEN EXIT
UPDATEWORLD
RENDERWORLD
FLIP
FOREVER
Урок 7 – спрайты, поверхности