Совместный проект Silver Soft и Andrushka’s Software.
Irrlight - что это такое и с чем его едят.
Урок 1. Основы.
Здравствуйте. Начнём наш первый урок. Не будем рассусоливать и сразу возьмём быка за рога. Итак, что вы должны были уже сделать:
• Скачать движок ( скомпилировать, если надо ).
• Прописать все необходимые пути к .h и .lib файлам. Ну не маленькие думаю справитесь. Если всё же возникли затруднения, то пишите на e-mail.
• Достать компилятор.
• Выучить азы C++. :)
Поехали.
Игровой автомат. Что это?
По этому поводу написано много умных и толстых книжек, поэтому я не буду рассусоливать тонны теоретического материала, а возьму лишь самое главное.
Представьте себе какую-нибудь простую шароварку. В ней в обязательном порядке есть игровое меню, какие-нибудь простые настройки и собственно сам игровой процесс.
Есть два варианта. Сделать всё hard-coded. Написать на чистом C, без классов. С огромным количеством if и switch. Господа, но мы же проживаем в век глобального господства ООП ;) ( некоторые извращенцы с этим не согласны, поэтому здесь надо осторожнее, могут побить ), поэтому будем писать с классами. :)
Итак, вернёмся к игровому автомату. У игрового автомата ( не АК-47, а автомат, который аппарат ) есть состояния, как и у автомата в реальной жизни. Состояние игры, состояние игрового меню, состояние меню настроек и так далее до бесконечности.
Каждое игровое состояние выполняет определённую работу. Игровое состояние позволяет нам играть, состояние меню позволяет нам тыкать по кнопочкам менюшки.
В определённый момент времени игровой автомат может находиться в определённом состоянии, и выполнять шаг игрового состояния.
Шаг – это набор действий которые выполняются за единицу времени, игровое состояние выполняет в бесконечном цикле шаг до тех пор, пока не поступит команда прекратить выполнения состояния. Состояние игры, например, за один шаг должно проверить какие клавиши тыкнул игрок, добавить монстров на экран, обработать действия игрока, отобразить летящие патроны ( конечно, это далеко не полный список ), после выполнения всех этих действий, если не поступило команды прервать игровое состояние, шаг повторяется с начала, т.е. проверяется ввод игрока и т.д.
В нашей игре эта штука будет реализована следующим образом. У нас имеется виртуальный класс CGameState. Остальные игровые состояния – его наследуют и используют свою реализацию методов класса. В класс CGame есть стек игровых состояний, куда состояния складируются в порядке их выполнения. ( например сначала CGameStateInit ( инициализация ), затем CGameStateLoadRes( загрузка ресурсов ), CGameStateLevel ( прождение по уровню, сам игровой процесс) ) . А в шаге CGame реализовано управление состояниями, вызовы OnCreate, OnDelete и Step, переход к следующему игровому состоянию.
Инициализация Irrlicht
Итак. Теперь будем разбираться с Irrlicht.
В NX++ существует самый главный объект – это NXRoot. С его помощью мы можем создавать окна рендеринга. ( вообще-то мы много чего можем с ним делать, но это разговор не этого урока ). Создать его можно только один экземпляр. NXRoot по научному – Singleton.
Всю реализацию инициализации движка я сделал в глобальном классе CGraph. Сама инициализация происходит в игровом состоянии CGameStateInit.
Итак как же провести инициализацию движка?
Сначала необходимо создать объект NXRoot.
NXRoot *root = new NXRoot();
Затем создать окно рендеринга. Окно рендеринга – это окно :). А если без шуток, то в нём собственно всё отображается, что нам захочется.
Здесь получаем указатель на ISceneManager – менеджер сцены. Используется часто. :) Добавляет в сцену новые объекты.
ISceneManager *smgr = rwin->getSceneManager();
На сегодня я думаю – всё. Внизу – ссылка на исходный код, мой e-mail и русский сайт. Исходник – просто показывает окно рендеринга. Пока разрещаю вам поиграться с параметрами и сконструировать свои игровые состояния.