Назад

   В этом уроке мы покажем, как создать "вид сверху", также известный как HUD (heads up display). Чтобы упростить задачу поиска монстра, мы создадим экран радара на нашем виде сверху и прозрачный задний план для отображения счета игры.

 rem Создаем HUD
Make object Plain 200,1,1
position object 200,-2.7,1.9,4
Lock object on 200
ghost object on 200

Эта часть кода помещается до основного цикла. Мы создаем плоский объект и привязываем его к положению камеры. Эта плоскость будет использоваться в качестве экрана радара.

Make object Plain 201,1,1
position object 201,2.7,1.9,4
Lock object on 201
ghost object on 201

Эта часть кода также вводится до основного цикла. Плоский объект будет использоваться в качестве заднего плана для экрана отображения счета игры.

 rem Загружаем и создаем растровые изображения hud
Load Bitmap "Radar.bmp",2
Create Bitmap 1,50,50

В этой части кода мы загружаем изображение радара и сохраняем его как изображение под номером 2. Растровое изображение отличается от текстуры. На нем можно рисовать и оно может быть изменено в самой программе. Особенно важным является растровое изображение под номером 0. Это изображение становится вашим экраном, на котором вы видите 3D-сцену. При вызове команды "Sync" именно это изображение перерисовывается и отображается. Мы загружаем изображение "Radar.bmp" в изображение под номером 2 и создаем новое пустое изображение, присваивая ему номер 1. Имейте в виду, что в DarkBASIC можно загрузить или создать не более 32 изображений. Команда "Load Bitmap" аналогична команде "Load Image". Первый параметр - имя загружаемого растрового изображения. Второй параметр - присвоенный ему номер - уникальный идентификатор изображения. Команда "Create Bitmap" создает в памяти пустое изображение указанного размера. Первый параметр - номер, присваиваемый изображению. Второй и третий параметры - это ширина и высота создаваемого растрового изображения. Параметры ширины и высоты представляют собой размеры изображения в пикселах.

 Rem Создаем радар
 Copy Bitmap 2,1
 set current bitmap 1
 ink rgb(0,0,255),rgb(0,0,0)
 PRX#=X#/200
 PRZ#=50-(Z#/200)
 Circle PRX#,PRZ#,1
 ink rgb(255,0,0),rgb(0,0,0)
 MRX#=mX#/200
 MRZ#=50-(mZ#/200)
 Circle MRX#,MRZ#,1
 Get image 200,0,0,50,50
 set current bitmap 0
 texture object 200,200
 ink rgb(255,128,128),rgb(0,0,0)

 

Этот код помещается ближе к концу основного цикла. Так создается, прорисовывается и накладывается на плоскость экран радара.

 Copy Bitmap 2,1

Команда "Copy Bitmap" копирует одно растровое изображение из памяти в другое, также находящееся в памяти. Первый параметр этой команды - номер копируемого изображения. Второй параметр - номер изображения, в которое вы хотите скопировать первое. Здесь мы копируем изображение, загруженное для заднего плана экрана радара в изображение, которое мы будем использовать в качестве экрана радара.

 set current bitmap 1

С помощью команды "Set Current Bitmap", вы указываете программе, что определенное изображение будет изображением для рисования по умолчанию. Чтобы вновь увидеть 3D-сцену, вы должны установить номер текущего изображения снова равным 0. Текущим мы делаем изображение радара. Оно содержит скопированное изображение, которое мы загрузили для заднего плана радара.

 ink rgb(0,0,255),rgb(0,0,0)

Команда "Ink" применяется для установки значения цвета переднего и заднего плана для любой команды рисования или текста. Первый параметр команды "Ink" - это цвет, используемый для рисования на переднем плане. Чтобы указать голубой цвет, мы применяем команду "RGB". Второй параметр - цвет заднего плана, или фона. При помощи команды "RGB" мы устанавливаем для него черный цвет.

 PRX#=X#/200
 PRZ#=50-(Z#/200)
 Circle PRX#,PRZ#,1

С помощью этих трех строк кода рисуется голубая окружность на изображении радара, представляющая игрока. Переменные "PRX#" и "PRZ#" используются для хранения координат игрока. Так как наша матрица - квадрат со стороной 100000 единиц, а растровое изображение радара - квадрат со стороной 50 пикселов, то мы делим 100000 на 50 и получаем 200. 200 - это переменная масштабирования. Мы делим значение координаты X игрока на 200, чтобы получить примерное значение координаты X на экране радара, и сохраняем эту величину в переменной "PRX#". Те же вычисления повторяем и для координаты по оси Z. Так как отсчет координат растрового изображения начинается в левом верхнем углу, а координат матрицы - в левом нижнем, мы берем масштабированное значение Z и вычитаем его из 50 для того, чтобы получить обращенное значение для экрана радара. Если этого не сделать, то экран радара будет отображать обращенные координаты.

 Circle PRX#,PRZ#,1

Мы используем координаты X и Z игрока на радаре, чтобы с помощью команды "Circle" нарисовать окружность по этим координатам на изображении радара. Первые два параметра этой команды - это координаты X и Y центра окружности на изображении. Третий параметр - радиус окружности. Мы установили этот параметр равным 1, чтобы нарисовать очень маленький кружок.

 ink rgb(255,0,0),rgb(0,0,0)
 MRX#=mX#/200
 MRZ#=50-(mZ#/200)
 Circle MRX#,MRZ#,1

Эти строки кода аналогичны приведенным выше, только мы устанавливаем цвет красным и используем переменные X и Y монстра для рисования окружности, которая символизирует монстра на радаре.

 Get image 200,0,0,50,50

Команда "Get Image" копирует изображение или его часть для использования в качестве текстуры. Первый параметр этой команды - это номер создаваемого изображения. Второй и третий параметры - координаты X и Y левого верхнего угла прямоугольной области, которую мы желаем скопировать. Четвертый и пятый параметры - координаты правого нижнего угла этой прямоугольной области. Так как наше изображение имеет размеры 50х50 пикселов, мы копируем изображение целиком. Наше основное изображение - это по-прежнему изображение под номером 1, откуда и копируется изображение для текстуры.

 set current bitmap 0
 texture object 200,200
 ink rgb(255,128,128),rgb(0,0,0)

Последняя часть кода радара снова устанавливает в качестве текущего изображение под номером 0, в котором и происходит прорисовка нашей 3D-сцены. Затем мы накладываем на плоский объект текстуру из только что созданного изображения. Оно содержит картинку радара с нарисованными на ней двумя кружками, соответствующими игроку и монстру. Меняем цвет из красного на матовый красный. Этот цвет будет использоваться до обновления изображения на экране радара. Отметим, что значения счета в игре выводятся тем же цветом.

 

Hosted by uCoz