Новости | Новинки | Контакты

Свобода 3D

Можно, конечно, до посинения смотреть на разные там вращающиеся кубы, сферы, конусы, цилиндры, свет, камеры – но когда-нибудь это надоест. Кроме того – игра (а ведь мы именно игры хотим писать а не всякие там трёхмерные абстрактные пейзажи) требует ввода чего-нить-там с клавиатуры…
Ну, тогда давайте разбираться с перемещением предмета. Я надеюсь, что предыдущие уроки вы хорошо освоили, так что начнём сразу с такого шаблона:

 

Graphics3D 640,480,16,1

SetBuffer BackBuffer()

cam=CreateCamera()

PositionEntity cam,0,5,-10

lit=CreateLight()

cub=CreateCube()

Repeat

UpdateWorld

RenderWorld

Flip

Until KeyHit(1)

End


Здесь мы (по порядку) инициализируем графику, создаём камеру, свет, куб и в цикле всё это рендерим и выводим на экран, пока не будет нажата клавиша Esc. Обратите внимание, что здесь мы поменяли позицию камеры (а не куба, как в прошлый раз), и теперь она имеет координаты X=0 Y=5 Z=-10. В итоге, получилось, что мы смотрим на куб сзади, и чуть-чуть сверху…

В нашем распоряжении имеется куб. Наша миссия двигать его, в направлении, задаваемом с клавиатуры. Итак, новые команды:

KeyDown(сканкод) – (вообще-то не команда, а функция) – проверяет, нажата ли соответствующая клавиша. В скобках нужно указать сканкод клавиши (Сканкоды клавиш можно узнать в хелпе Блитц3Д, в разделе Command Reference). Мы будем управлять клавишами управления курсора и манипулятором типа мышь J. Значит сразу напишу сканкоды (всем запомнить – пригодится): кнопка вверх – 200, вниз – 208, влево – 203, вправо – 205. С мышой потом. Далее…

MoveEntity объект, перемещение по X, по Y, по Z – перемещает объект относительно своей собственной системы координат (помните писал J).

Так, у нас есть команда проверки нажатия клавиш, и есть команда перемещения объекта… осталось только связать их вместе. Как это сделать? Очевидно, просто надо поставить условие – н-р. ЕСЛИ НАЖАТА кнопка ВВЕРХ то ПЕРЕДВИНУТЬ ОБЪЕКТ ВПЕРЁД, ну, и так далее… Я надеюсь вы прочитали туториал по основам БлитцБейсика, поэтому команду условия IF я уж объяснять не буду… А так это должно выглядеть:

 

If KeyDown(200) MoveEntity cub,0,0,.1


Поставьте это условие в начало цикла, и запустите прогу. Теперь, когда вы будете нажимать кнопку вверх, куб будет двигаться по направлению своей оси Z… то есть вперёд! По аналогии сделаем остальные условия:

 

If KeyDown(208) MoveEntity cub,0,0,-.1

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

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


Полностью код выглядит так:


Graphics3D 640,480,16,1

SetBuffer BackBuffer()

cam=CreateCamera()

PositionEntity cam,0,5,-10

lit=CreateLight()

cub=CreateCube()

Repeat

If KeyDown(200) MoveEntity cub,0,0,.1

If KeyDown(208) MoveEntity cub,0,0,-.1

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

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

UpdateWorld

RenderWorld

Flip

Until KeyHit(1)

End


Ну – кубик двигается! Что ещё нужно для счастья? Я думаю достаточно... но Блитц3Д предоставляет нам очень много возможностей на этой почве, и в следующих уроках мы постараемся уяснить самые важные.

 

 
© 2007 Независимый проект - сайт команды Simplesoft Studio 3D' team