Цель урока: научиться перемещать объект на матрице, используя вид от третьего лица.
Sync
On
Sync
Rate 30
Rem
Создаем матрицу
Make
matrix 1,10000,10000,20,20
Rem
Текстурируем матрицу
Load
image "grass09.bmp",1
Prepare
matrix texture 1,1,1,1
Fill
matrix 1,0,1
Rem
Создаем объект
Load
image "barry.bmp",2
Make
object sphere 10,25
Texture
object 10,2
position
object 10,100,0,100
rem
Устанавливаем случайные значения для вершин матрицы
randomize
matrix 1,125
Rem
Основной цикл
Do
set
cursor 0,0
print
screen fps()
Rem
Сохраняем угол объекта
AngleY#
= object angle Y(10)
Rem
Управление перемещением камеры
If
Upkey()=1
XTest# = Newxvalue(X#,AngleY#,20)
ZTest# = Newzvalue(Z#,AngleY#,20)
If XTest#>0 and XTest#<10000 and ZTest#>0 and ZTest#<10000
Move object 10,10
Endif
Endif
If
Leftkey()=1 then Yrotate object 10,Wrapvalue(AngleY#-5)
If
Rightkey()=1 then Yrotate object 10,Wrapvalue(AngleY#+5)
X#
= Object position x(10)
Z#
= Object position z(10)
Y#
= Get Ground Height(1,X#,Z#)
Position object 10,X#,Y#+12.5,Z#
CameraZ#
= Newzvalue(Z#,AngleY#-180,100)
CameraX#
= Newxvalue(X#,AngleY#-180,100)
CameraY#
= Get Ground Height(1,CameraX#,CameraZ#)
Position
camera CameraX#,CameraY#+50,CameraZ#
Point
camera X#,Y#+25,Z#
Rem
Обновляем экран
Sync
Loop
Эта программа позволяет пользователю перемещать текстурированную сферу по матрице при помощи клавиатуры. Мы начнем этот урок с описания простой служебной команды.
print screen fps()
"Screen Fps()" является полезной командой, с помощью которой можно узнать, с какой скоростью происходит обновление экрана. Попробуйте выставить значение синхронизации 0 и запустите программу. Вы увидите число на экране, показывающее, сколько раз в секунду происходит обновление экрана. Если частота обновления на вашей видеокарте привязана к частоте обновления монитора, вы не сможете узнать максимальную скорость обновления, которую способна выдавать ваша видеокарта. Некоторые видеокарты позволяют отключать синхронизацию ("VSync"), при этом экран обновляется с максимально возможной скоростью.
X#
= Object position x(10)
Z#
= Object position z(10)
Y#
= Get Ground Height(1,X#,Z#)
Position object 10,X#,Y#+12.5,Z#
CameraZ#
= Newzvalue(Z#,AngleY#-180,100)
CameraX#
= Newxvalue(X#,AngleY#-180,100)
CameraY#
= Get Ground Height(1,CameraX#,CameraZ#)
Position
camera CameraX#,CameraY#+50,CameraZ#
Point
camera X#,Y#+25,Z#
Как и в предыдущем уроке, для нахождения высоты матрицы в определенном месте мы используем команду "Get Ground Height". Здесь мы используем эту команду дважды: один раз для того, чтобы определить высоту в месте, где располагается сфера, и второй раз для того, чтобы определить высоту в том месте, где располагается камера. Вы заметите, что оставшаяся часть кода такая же, как и в предыдущем уроке. Единственное, что мы здесь изменили - это добавили значение Y#.
Попробуйте использовать выражение "Rem", чтобы закомментировать следующую строку кода:
CameraY# = Get Ground Height(1,CameraX#,CameraZ#)
А в строке:
Position camera CameraX#,CameraY#+50,CameraZ#
замените переменную CameraY# на Y# и посмотрите, как это отражается на поведении камеры.