18c0693f

Физическая модель прыжка (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 – спрайты, поверхности