ПРОГРАМИРУЕМ 3D ГРАФИКУ ИСПОЛЬЗУЯ DirectX



         

Спрайты - часть 12


m_pScene-»m_ShapeList .Append (pWall) ;

pwi++;

}

Приложение Sprites

/h2>

Данные для каждой стены состоят из двух наборов угловых координат х и у и высоты. Стены поочередно создаются и включаются в макет.

Пол представляет собой объект с одной гранью, на которую наложена текстура. Для фона макета выбран синий цвет, чтобы создать иллюзию неба над стенами:

m_pScene-»SetBackground(0, О, 1);

CFloor* pFloor = new CFioor(-6, -6, 6, 6) ;

m_pScene-»AddChild (pFloor);

m_pScene-»m_ShapeList .Append (pFloor) ;

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

Последнее, что необходимо добавить в наш лабиринт, — врагов и взрывы. И снова я создал специальные классы для каждого из этих объектов. Они являются производными от C3dSprite, и поскольку оба класса похожи, мы рассмотрим лишь один из них. Ниже приведено определение класса CSoldier (находящееся в файле maze.h), с помощью которого мы создаем себе врагов:

class CSoldier : public C3dSprite

{

public:

CSoldier(C3dScene* pScene, double х, double z) ;

void Update 0;

>;

Как видите, здесь нет ничего сложного: конструктор создает объект, а функция Update заведует его перемещением. Код конструктора (из файла maze.cpp) выглядит следующим образом:

CSoldier::CSoldier(C3dScene* pScene, double х, double z) (

Create(pScene, х, 0, z, 0.5, IDB_SOLDIER, 4);

Должно быть, выше приведена одна из самых простых функций, которые нам приходилось видеть в этой книге. Функция C3dSprite::Create выполняет всю основную работу по созданию объекта-спрайта. Ей передается идентификатор растрового ресурса. Последний аргумент (4) определяет количество кадров в спрайте (не считая рабочей области).

Поскольку спрайты должны двигаться, нам понадобится функция Update для изменения фазы:

void CSoldier::Update() {

SetPhase((GetPhaseO + 1) % GetNumPhases ());

/b> fli"' Глава 9. Спрайты

Данная функция вызывается во время пассивной работы приложения, непосредственно перед обновлением всего макета. Класс для взрывов содержит аналогичную функцию для изменения внешнего вида взрыва со временем.

Постойте, какого еще взрыва?!? А это вы можете выяснить самостоятельно (или в компании врагов).

Довольно о плоских фигурах

Мы выяснили, как пользоваться спрайтами для отображения персонажей или объектов в трехмерной сцене. Как нетрудно убедиться, создавать многогранные фигуры вовсе не обязательно. Спраиты могут использоваться вместе с трехмерными объектами, чтобы обеспечить оптимальное соотношение между качеством изображения и производительностью.

Создание игры отнюдь не сводится к расстановке спрайтов в трехмерном макете. Я даже не пытался показать, как ограничить перемещение игрока в лабиринте или предупредить его о приближающейся опасности. Оставляю эту работу вам — сделайте следующий шаг и реализуйте перечисленные мной функции.




Содержание  Назад  Вперед