Главная » Статьи » Компы! » Програмирование! |
Материал уроков излагается на конкретных действующих примерах. Код приводится по частям и рассматривается очень подробно. Полный код вместе с медиа-ресурсами (графика, звуки, модели и т.д.) прилагается после рассмотрения отдельных фрагментов. В качестве демонстрации изложения фрагмента одного из уроков, рассмотрим такой интересный пример, как управление камерой в играх от третьего лица. Для этого примера понадобится стандартная модель из комплекта поставки (Blitz3D) робот (robotic.3ds) и набор текстур для нее. Цель программы - привязать камеру к модели робота, чтоб всегда видеть его спину. Управление движением модели будем производить с помощью клавиатуры. В пользовательском типе Player: entity - родительский объект для модели, model - загружаемая с диска сама модель робота. Загрузка всех необходимых медиа-ресурсов произведем в следующей функции: Function LoadGameObjects() level=LoadMesh( "maps\tur.b3d" ) ScaleEntity level,.15,.15,.15 player_model = LoadAnimMesh( "ROBOT\robotic.3DS" ) End Function В качестве уровня используется объект в формате .b3d, сделанный в редакторе CartographyShop 4.1 (ссылки на инструменты, которые мы будем использовать в курсе и другие полезные программы, смотрите тут: Полезные ссылки) Создание самих объектов робота и камеры приведем ниже: Function CreatePlayer.Player( x#,y#,z# ) Function CreateSmartCam.SmartCam( entity ) c\target=CreatePivot( entity ) c\heading=CreatePivot( entity ) При создании объекта робота (CreatePlayer.Player( x#,y#,z# )) - вначале создается пустой объект при помощи команды New. После чего инициализируем переменные объекта: entity и model. При создании объекта камеры (CreateSmartCam.SmartCam( entity )) - используется стандартная функция CreateCamera() Поля target и heading инициализируются как пустые объекты (pivot) и позиционируются в пространстве для установки благоприятного "видения" камерой модели. Изменение состояние камеры и модели робота в процессе перемещения описываются следующим образом: ;================================ If KeyDown(203) ;поворот налево/направо If KeyDown(30) ;движение вперед кл. А ty#=EntityY(p\entity) y_vel=y_vel -.5 ;================================ If KeyDown(200) dx#=EntityX(c\target,True)-EntityX(c\camera,True) TranslateEntity c\camera,dx*ssp,dy*ssp,dz*ssp PointEntity c\camera,c\heading PositionEntity c\target,0,0,0 End Function В функции UpdayePlayer осуществляется реакция программы на нажатия клавиш A/Z - движение модели робота вперед/назад и стрелок вправо/влево. Изменение режимов анимации осуществляется при помощи команды Animate. Всего этих режимов два - для перемещения робота и при отсутствии движения. Второй аргумент команды Animate как раз отвечает за смену последовательностей анимации. Движение модели робота вперед/назад осуществляется при помощи команды MoveEntity. Переменная y_vel отвечает за гравитацию. То есть, по сути, модель стремится к движению по оси Y, чему мешает пол уровня (коллизии учитываются автоматически при задании соответствующих зависисмостей ). Как только робот покидает пол, гравитация скидывает его в пропасть. Почему модель не проваливается сквозь пол? За этот процесс отвечает контроль столкновений или коллизий описанный ниже: Const TYPE_PLAYER=1, TYPE_TARGET=2, TYPE_WALL=3 Collisions TYPE_PLAYER,TYPE_WALL,2,2 Команда Collisions устанавливает зависимости между разными объектами при их столкновении. Так зависимости установлены между объектами - "камера-уровень" и "робот-уровень". Что касается функции UpdateSmartCam, то она занимается синхронизацией и ориентированием камеры относительно модели робота. Клавиши вперед/назад - меняют угол наклона камеры. | |
Просмотров: 739 | Рейтинг: 0.0/0 |
Всего комментариев: 0 | |
Наш опрос |
Статистика |
Онлайн всего: 1 Гостей: 1 Пользователей: 0 |
Поиск |
Друзья сайта |
|