РУКОВОДСТВО ПО
СОЗДАНИЮ 3D-ИГР III. ИГРА 3. Боковое движение
(стрейфинг)
Цель урока:
Показать способ реализации бокового движения (стрейфинга).
Боковое движение (стрейфинг) - это
отличный способ ловко уходить от ракет или в движении просматривать боковые
пространства. Мы продемонстрируем, как реализовать этот режим с использованием
клавиш "стрелка вправо" и "стрелка влево". Здесь мы приводим только ту часть
кода, которая претерпела изменения по сравнению с предыдущим уроком. По мере
добавления новых возможностей в нашей игре, код становится слишком большим,
чтобы приводить его целиком.
If
Leftkey()=1 XTest# =
Newxvalue(X#,Wrapvalue(CameraAngleY#-90),10) ZTest# =
Newzvalue(Z#,Wrapvalue(CameraAngleY#-90),10) If XTest#>0
and XTest#<10000 and ZTest#>0 and ZTest#<10000
X#=XTest# Z#=ZTest#
Endif Endif
If
Rightkey()=1 XTest# =
Newxvalue(X#,Wrapvalue(CameraAngleY#+90),10) ZTest# =
Newzvalue(Z#,Wrapvalue(CameraAngleY#+90),10) If XTest#>0
and XTest#<10000 and ZTest#>0 and ZTest#<10000
X#=XTest# Z#=ZTest#
Endif Endif
Боковое движение реализуется с
помощью команд "NewXValue" и "NewYValue", предназначенных для определения
значений X# и Z# следующей позиции. Для определения координат перемещения влево,
мы сначала вычитаем 90 градусов из текущего значения угла поворота камеры
"CameraAngleY#", чтобы обозначить направление движения. Чтобы значение угла не
превышало 360 градусов, мы применяем команду "WrapValue". Используя значение
этого угла в командах "NewValue", мы определяем координаты точки, находящейся в
10 единицах пространственных координат левее. Новые координаты сохраняются в
переменных "XTest" и "ZTest". Затем производится проверка этих переменных, чтобы
убедиться, что новые значения находятся в пределах матрицы. Если проверка
оканчивается успешно, то новые значения сохраняются в переменных "X#" и "Y#" и
используются для перемещения камеры. Как вы помните из урока I:2, ось Y проходит
от верхней к нижней части экрана, поэтому любой поворот вокруг оси Y будет
параллельным по отношению к матрице.
Ресурсы к урокам на Dark Basic |