воскресенье, 22 января 2012 г.

Bomberman - локация и главный герой

Наконец-то удалось уделить два прошлых денька бомберу)
На этот раз я занялся формированием поля боя и его разрушением готовыми бомбами.
А так же набросал класс главного героя, подгрузил туда тестовую модельку и заставил его выполнять свои обязанности)
Ещё успел задизайнить главное меню и заставки.

Вот об этом и поподробнее...


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

Начнём с того, что в силу основной занятости я почти не садился за бомбера и от этого ход плавной инкрементной разработки перешёл в экстремальное программироавние.

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


Сразу хочу обратить внимание на ту деталь с бомбами, которая выглядит не совсем так как надо - это то что они вертятся за камерой, код приведён в прошлой теме. Но щас как-то к этому уже привык)

Ну вот, а дальше и пошла спешка в написании. Я взялся уже сразу за код основного проекта, сделал основу заставки с логотипами, главное меню и вход в пока что единственный уровень.

Первым делом добавил ещё кое каких эффектов к взрывам.
Вот тут я чутка попарился с взаимным отображением спрайтов...
Дело в том, что если создавать плоскости(для спрайтов эффектов) чаелдами разных родителей(в моём случае были разные дамми кубы), то на альфа областях начинают резать глаза артефакты.
От такие вот:

Сначало я думал что надо крутить настройки материалов, перекрутил всё, в основном это были настройки буфера глубины, но никакие изменения не подошли.
И уже когда отчаялся всё рендерить вручную, создал все эффекты под одним родителем и всё исправилось "само")

И так для эффектов у меня в результате получилось написано 2 класса:
  • это эффект огненного хвоста осколка, в котором по сути реализована система частиц на основе TGLPlane'ов
  • и простой спрайтовый эффект для дополнительных взрывов.
А общий родитель для всех частиц находится в общедоступном месте - в синглтоне-контейнере основных объектов сцены.

Далее подкрутил функцию для того чтобы извне(а все эти действия присходят в классе TField) можно было приказом создавать уровень с определёнными параметрами.

После этого решил что надо бы и главного героя набросать, чтобы уже он сам ставил бомбы, а не мне рандомно тыкать приходилось) Сделал потомка от TGLActor'а с локальным расчётом очерёдности нажатий клавиш, которые влияют на его перемещение и установку бомб.
А обработку столкновений и само движение, как следствие, сделал в TField, что позже оказалось не совсем правильно организованным с моей стороны...(плоды экстрима)
По уму обработка связки бомбермен-стены должна быть в вышестоящем классе TSingleGameManager, и класс-то у меня был, но сейчас не думаю что буду тратить время на перенос в него должных операндов...

В результате у меня образовалась картинка с перемещающимся "нежевым" болваном-бомберменом, но зато он уже ставит бомбы и плавно обруливает углы стен)

Вот пара скринов:


Вот думаю, оставить зазор у кирпичных стен или нет?

Далее я чуток повыбирал что делать дальше... Сделать ботов или сделать "живую" модель бомбера. Благо, что сама модель уже готова, а вот анимация и текстуры не очень.
У ботов же вообще ничё не готово)

И решил сделать звуки) Всяко не скучно будет тестить))
Для звуков у меня есть общедоступный синглтон TSoundManager, который представляет из себя мини менеджер на основе библиотеки squall.dll.
Звуки получились отменными, аж сам доволен)

Ну теперь всётаки пришло время пошевелиться с моделькой бомбера, а то пока настроения нету ИИ писать.
Анимацию решил поделать сам и поделал) Сётаки анимирую я лучше чем моделю, а моделить аще вроде как не умею)

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

Терь надо загрузить его вместо балванки да ещё и анимацию подгружать в нужный момент.
Вот тут у меня возникли какие-то непонятки с загрузкой... я сначало подумал что что-то я в настройках актёра подзабыл, а потом когда всё проверил, решил что чё-то с экспортёром не правильно. Но дело вроде как оказалось в том, что перед экспортом я выделил не все кости, а решил выделить только те, которые скинуются с моделькой. Точно я это не проверял, но когда переэкспортировал выделив всё, то всё стало грузиться нормалёк.
По поводу обработки поворотов - это я добавил операнды в локальный обработчик Progress в классе бомбера.
Посмотрел на динамику, подправил чутка скорость анимации, вроде всё ровно.

Далее добавил условия непроходимости бомб, эт впринципе тоже самое что со стенками, только с бомбами)

Пока писал и сшулал музыку, нашёл боле-менее подходящую музыку к главному меню и процессу игры) Вывел настройки уровня звука для музыки и эфектов в обычный .ini файл.
Т.к. менюшку опций наверное делать не буду, а в инишке пускай будет.

От такие дела за 2 дня, вроде на этом пока всё, видос того что получилось показывать не буду ибо интрига! Ну или пока не выйдет что-нить пободрее)

Из основных этапов впереди ждут крипы, бонусы и организация уровней.
А по мелочи: очки-кнопочки))

3 комментария:

  1. Отлично :)

    По поводу бомб - я все же был прав. Вертятся они так же, как и у меня вертелась планета в космосиме. Как делаешь их биллбордами? Direction выставляешь как вектор к камере?

    ОтветитьУдалить
    Ответы
    1. perfect daemon,
      в прошлой теме был код:
      fBombSprite.Up.SetVector(VectorMake(0, 1, 0));
      cam_ap := Self.Scene.CurrentGLCamera.AbsolutePosition;
      fBombSprite.Direction.SetVector(VectorSubtract(cam_ap, fBombSprite.AbsolutePosition));

      т.е. всегда сначало Up вверх, а потом direction по вектору к камере.

      Удалить