Цель урока: помочь новому пользователю освоиться с основными шагами разработки проектов на
WorldSim3D.
Давайте сделаем простой, примитивный проект. В этом проекте мы сделаем так, чтобы на сцене слева направо двигался куб. Обратите внимание: это не урок по созданию игры, в котором объясняется всё «от и до», скорее это урок по созданию любого проекта, описывающий в общем основные шаги. Урок написан так чтобы даже тот, кто раньше не работал в среде программирования FreeBasic, мог всё понять. Хотя надеюсь, вы уже хоть немного ознакомились с Фрибейсиком, а также воспользовались
уроком 1: «Quick start» (Быстрый старт).
1. Создаём файл проекта на Фрибейсике (дальше я буду язык программирования Фрибейсик называть кратко ФБ или FB).
Запускаем FBEdit: Файл -> Новый проект. Откроется диалоговое окно. В котором нужно указать настройки проекта:
-
Название проекта – MovingBox (давайте так назовём, что означает «Движущийся куб»);
-
Описание проекта – напишем Framework. Можете писать здесь, что угодно.
- Путь: вводим путь, по которому будет находиться файл проекта на ФБ. Вы можете выбрать путь: …/FreeBasic/Projects/WorldSim3D_0.9/MyProjects. Папка
MyProjects специально создана для нового пользователя, чтобы он не терялся в догадках, где ему создать свой проект. (Я не рекомендую вам создавать свои проекты в папке /FreeBasic/Projects/WorldSim3D_0.9/Examples, где находятся примеры от разработчика, иначе у вас в этой папке может возникнуть беспорядок, в котором потом будет трудно разобраться).
Итак, выбрали путь, нажимаем OK и идём дальше.
Давайте уберём галочку с опции «Подпапка проекта». Иначе в папке MyProjects будет создана дополнительная папка для проекта, а это создаст трудности для путей к другим файлам.
- Тип проекта: Windows GUI. Кликаем OK.
Редактор выдаст предупреждение, что такая папка уже существует, а нам сейчас это и надо. Кликаем ДА.
Готово! Мы создали новый пустой проект для работы в среде ФБ с WorldSim3D. Теперь в папке проектов появятся 2 файла:
-
Moving Box.fbp – файл проекта ФБ, в котором находятся настройки проекта и
-
Moving Box.bas – файл, в котором будет код нашего проекта.
2. Скопируем в корневую папку только что созданного проекта файлы, необходимые для работы проекта. Эти файлы находятся в папке Examples. Для данного урока нам понадобятся только те файлы, которые выделены на скриншоте:
3. Теперь переходим непосредственно к коду.
3.1. Включаем в наш код библиотеку функций движка. Пишем:
Код
#include "WorldSim3D.bi"
Обратите внимание, что значёк на вкладке Moving Box - красного цвета; это значит, что код проекта изменился и чтобы случайно не потерять его, нужно сохранить (да, попутно будем осваивать немного работу с FBEdit, если вы ещё с ним не осовоились).
Давайте сохраним проект: Файл -> Сохранить или Ctrl+S, или просто кликнуть по кнопке сохранить на панели задач. Теперь значёк стал белым и это означает, что проект сохранён.
Почаще сохраняйте свои проекты! Иначе можно потерять ценные минуты, а то и часы, которые вы провели за проектом.
3.2. Теперь объявим несколько переменных:
Код
DIM BoxTexture as wTexture ‘ текстура для куба
DIM AnimatedBox as wNode ‘ нод для куба
DIM MovingBox as wAnimator ‘ аниматор для куба
DIM Camera as wCamera ‘ камера
Куб, это куб, который в проекте будет просто двигаться слева направо. Позже добавим ещё несколько переменных.
3.3. Теперь добавляем в код ещё 3 команды:
Код
wStart ( wDT_OPENGL, 800, 600, wBITS_PER_PIXEL_32,_
wWINDOWED, wNO_SHADOWS, wCAPTURE_EVENTS, wVERTICAL_SYNC_ON)
' запуск окна WorldSim3D с параметрами: рендер OpenGL, разрешение экрана
800 на 600, глубиной цвета 32 бита, в оконном режиме, без отображения
теней, с возможностью использовать мышь и клавиатуру для управления
и вертикальной синхронизацией.
‘ устанавливаем текст в заголовке окна
wSetWindowCaption ( "My first project: Moving Box")
‘ добавим в проект яркий свет, освещающий всё вокруг
wSetAmbientLight ( 1, 1, 1)
3.4. Дальше загрузим текстуру для куба
Код
BoxTexture = wGetTexture ( "../media/Textures/Round_container.png")
Не забываем сохранять проект.
3.5. Добавим на сцену куб. Нам не надо для этого загружать в проект отдельную модель для куба,
так как для тестовых целей в движке предусмотрены функции для быстрого добавления нескольких
простых объектов. Тем не менее в ваших обычных игровых проектах лучше всё же загружать модели
а не пользоваться функцией wAddTestSceneNode, предназначенной для тестовых целей.
Код
AnimatedBox = wAddTestSceneNode
' накладываем на куб текстуру
wSetNodeMaterialTexture ( AnimatedBox, BoxTexture,0)
' увеличим немного куб, чтобы его лучше было видно
wSetNodeScale ( AnimatedBox, 2.5, 2.5, 2.5)
Так выглядит код проекта на данный момент:
3.6. Теперь добавим Аниматор. Это такой объект, который что-то анимирует, т.е. приводит в
движение. Таких Аниматоров в движке – 6. Мы воспользуемся тем, который двигает объект по
прямой. Наш куб будет двигаться слева направо по прямой линии.
Код
MovingBox = wAddFlyStraightAnimator ( AnimatedBox, 0, 50, -300, 0, 50, 300, 3000, wLOOP)
' Данный аниматор будет здесь двигать куб по прямой линии. Первые 3 числовых параметра
' определяют начальную позицию куба, следующие 3 параметра - конечную позицию;
' следующий параметр - это число миллисекунд (1 секунда = 1000 миллисекунд), которое
' требуется кубу для прохождения пути; последний параметр определяет, должен ли куб
' пройти по пути только 1 раз или бесконечное число раз.
3.7. И наконец, добавляем камеру:
Код
Camera = wAddCamera ( 150, 50,0, 0, 0, 0)
И пока закончим со сценой.
4. Главный цикл и выход из игры.
Главный цикл проекта, это цикл из обычных команд ФБ вместе с функцией движка
wRunning:
4.1. Добавим в проект этот главный цикл. Это основа для всех проектов, созданных на WorldSim3D. В
нём должны быть как минимум 3 функции движка:
wBeginScene (),
wDrawScene и
wEndScene (исключение составляют проекты или части проектов, где не нужно отображение 3D-сцены, а только спрайты, например, меню игры, в том числе и работа с функциями GUI. Тогда в цикле не нужна функция wDrawScene).
Код
' ---------------------------- ГЛАВНЫЙ ЦИКЛ ----------------------------
' цикл, в котором WorldSim3D обрабатывает все события
WHILE wRunning
' начать рендеринг сцены; фон установим небесно-голубого цвета
wBeginScene ( 240, 255, 255)
' прорисовка сцены
wDrawScene
' закончить прорисовку и рендеринг (отображение) сцены
wEndScene
WEND
' ---------------------------------------------------------------------
' Остановить работу WorldSim3D и высвободить ресурсы памяти
wStop
Теперь можно запустить наш проект. Если всё сделано правильно, то мы увидим быстро проносящийся слева направо текстурированный куб.
4.2. Установка фреймрейта. В любом цикле в среде ФБ команды исполняются определённое
количество раз в секунду. Сколько раз – зависит от мощности процессора пользователя, а также от
того, сколько операций нужно просчитывать процессору для отбражения сцены. А значит, фреймрейт проекта может быть намного больше 60, в чём нет никакой необходимости.
Так вот, нам нужно, чтобы фреймрейт был не меньше 60, чтобы плавно отображать сцену. Но и
больше 60 тоже не нужно, даже если процессор это позволяет. Подробнее об этом смотрите
Урок 3: Контроль фреймрейта в WorldSim3D.
Как ограничить фреймрейт 60 кадрами в секунду?
Давайте объявим переменную для определения количества времени, код которого будет, конечно
же, в главном цикле вашего проекта:
Код
Dim as Single frameTime = Timer + 0.0167
Это объявление делаем до главного цикла.
В самом начале главного цикла While wRunning … Wend мы вставляем такой код:
Код
' время для следующего кадра
if timer > frameTime then ' начинаем условие для отображения сцены
' подсчитать время когда следует очередной кадр
frameTime = timer + 0.0167 ' время прошедшее с начала цикла + 1/60 секунды
В самом конце главного цикла мы закрываем это условие оператором End If и теперь главный цикл
выглядит так:
Код
WHILE wRunning
’ --------------------------------------------------------------------
' начало условия для отображения сцены не более 60 раз в секунду
if timer > frameTime then
frameTime = timer + 0.0167
‘ ВНУТРИ ЭТОГО УСЛОВИЯ ВСЁ ОСТАЛЬНОЕ
wBeginScene ( 240, 255, 255)
…. ' ЗДЕСЬ ВАШ КОД ДЛЯ ОТОБРАЖЕНИЯ 3D-сцены
wDrawScene
wEndScene
End If ‘ конец условия для отображения сцены не более 60 раз в секунду
'-------------------------------------------------------------------------
WEND ' конец главного цикла
Теперь фреймрейт ограничен 60-ю кадрами и это вполне достаточно для плавного отображения
динамично меняющейся сцены.
4.3. Выход из игры.
Выход из игры делается одной командой:
Эта команда должна следовать после главного цикла. Выход из вашего проекта (игры) происходит,
когда, например, игрок кликает на значёк «закрыть» на стандартном окне Windows; либо когда игрок
кликает на кнопку «Выход из игры» (для этого нужно добавить небольшой код к команде wStop –
условие при котором происходит выход из игры, но объяснение этого выходит за рамки темы нашего
урока). При этом высвобождаются все ресурсы памяти, которые были заняты вашим проектом.
В целом, мы сделали основу для игры, как бы её каркас или скелет, который должен быть в каждом
вашем проекте: объявление переменных, запуск WorldSim3D, первоначальные настройки игры (с
установлением объектов, текстур, камеры, света и другого), главный цикл и выход из игры.
Чтобы не усложнять наш 1-й проект и не терять из виду цель этого урока, мы не будем превращать
его в урок по созданию игры. Мы и так уже достигли цели урока, увидев скелет любого проекта,
созданного на WorldSim3D.
5. Но чтобы было немного интереснее, давайте сделаем так, чтобы движущийся куб менял
свой цвет, когда мы нажимаем на кнопки клавиатуры.
5.1. Объявим переменную для обработки событий клавиатуры:
Код
DIM KeyEvent as wKEY_EVENT Ptr
5.2. В главном цикле, после функции wBeginScene () вставляем другой цикл, в котором будет
постоянная проверка, на то, не нажата ли какая-либо клавиша клавиатуры:
Код
While wKeyEventAvailable
…
Wend
5.3. Теперь в этот цикл вставляем такой код:
Код
KeyEvent = wReadKeyEvent
' обработка нажатия какой-либо клавишы
select case as const KeyEvent->key
case KEY_KEY_1 ' клавиша 1
wSetNodeAmbientColor ( AnimatedBox, RGBA ( 0,0,255,0)) ' синий
case KEY_KEY_2 ' клавиша 2
wSetNodeAmbientColor ( AnimatedBox, RGBA ( 255,0,0,0)) 'красный
case KEY_KEY_3 ' клавиша 3
wSetNodeAmbientColor ( AnimatedBox, RGBA ( 0,255,0,0)) 'зелёный
end select
Получается так:
Нажимая на клавиши 1,2 или 3, мы меняем цвет куба (а точнее освещаем куб разными цветами).
На этом, пожалуй, и закончим урок по созданию каркаса на WorldSim3D.
Чему мы научились? Любой проект, созданный на WorldSim3D, состоит из таких частей как:
• объявление переменных;
• запуск WorldSim3D;
• первоначальные настройки игры (с установлением объектов, текстур, камеры, света и другого);
• главный цикл;
• выход из игры. Безусловно, из этих частей состоит проект или игра, сделанная на любом движке, но мы увидели как
они реализованы в WorldSim3D.
Исходник (.bas)
скачать Успехов в создании ваших проектов и радости в геймдеве!