Круто, конечно, перемещаться стрейфом, но это не всегда то, что нам нужно.

В этот раз кое-что переделаем – две последние строчки проверки нажатия клавиш немного изменим. Теперь, когда мы будем нажимать кнопки ВЛЕВО и ВПРАВО он будет поворачиваться влево и вправо (для тех, кто не понял - раньше он перемещался влево и вправо ).

Итак, строчки:

If KeyDown(203) MoveEntity cub,-.1,0,0
If KeyDown(205) MoveEntity cub,.1,0,0

Нужно заменить на:

If KeyDown(203) TurnEntity cub,0,1,0
If KeyDown(205) TurnEntity cub,0,-1,0

Вот у нас уже что-то вроде автогонок вырисовывается (точнее кубогонок ). Так, команду TurnEntity вы уже знаете, но обратите внимание, что если мы хотим, чтобы наш объект вертелся именно влево-вправо, мы поворачиваем его по оси Y.

Чтобы немного было понятнее, где у него передняя часть, а где боковые, я предлагаю его немного трансформировать!

ScaleEntity cub,1,.5,2

Эту команду нужно вставить после команды создания куба (смотрите не вставьте её в цикл ).

Синтакс: ScaleEntity объект, трансформация по X, по Y, по Z. То есть в примере мы оставляем такой же размер по X (ширину) (1 значит, что мы оставляем тот же размер), трансформируем размер по Y (высоту) до 0.5 от его размера (то есть просто уменьшаем в 2 раза) – получается как бы сплющиваем его сверху, и в два раза увеличиваем размер по Z (длину) – то есть растягиваем его в длину. Получился такой… кирпич…

Вот ездит этот кирпич, ездит, да заезжает за экран, так что мы перестаём его видеть. А как бы сделать так, чтобы не терять его из виду? Здесь нам поможет такая замечательная команда PointEntity объект1, объект2 – эта команда просто поворачивает объект1 в сторону объекта2. То есть если мы хотим, чтобы наша камера всегда следила за нашим кубиком, нам просто нужно вставить эту команду в цикл!

Вот как это делается:

PointEntity cam,cub

Эту команду можно вставить в любое место в цикле, но, чтобы у нас было всё по порядку, поставим её после команд проверяющих нажатия клавиш.

Вот полный код:

Graphics3D 640,480,16,1

SetBuffer BackBuffer()

cam=CreateCamera()

PositionEntity cam,0,5,-10

lit=CreateLight()

cub=CreateCube()

ScaleEntity cub,1,.5,2

Repeat

	If KeyDown(200) MoveEntity cub,0,0,.1
	
	If KeyDown(208) MoveEntity cub,0,0,-.1
	
	If KeyDown(203) TurnEntity cub,0,1,0
	
	If KeyDown(205) TurnEntity cub,0,-1,0
	
	PointEntity cam,cub
	
	UpdateWorld
	RenderWorld
	
	Flip

Until KeyHit(1)

End

Опять же столько всего, только в 18 строчках!

Если запустить программу, то видно, что камера как бы следит за кубиком, хотя это плохо понятно – такое чувство, как будто он ездит сам как хочет. Всё это потому, что у нас нет ничего, с чем мы могли бы сравнивать его положение.