Вниз  Игра "Zone of Alienation: The Beginning"
- 4.11.2014 / 08:18
dimon_net
  Пользователь

dimon_net 
Сейчас: Offline
Zvers (02.11.2014/13:21)В этой версии из движка убрал ненужные пакеты, связанные с мультиплеером и 3D графикой. Они, разумеется, не допиленные. Просто не удивляйтесь, что в некоторых классах есть закомментированные строки, сЗачем? Можно было выложить и кто-то доделал пакеты.
И ещё как создать квест в этой игре?

Изменено dimon_net (4.11 / 08:18) (всего 1 раз)
- 4.11.2014 / 13:10
Zvers
  Пользователь

Zvers 
Сейчас: Offline
dimon_net, В классе Quests дефолтного пакета все квесты. Добавить квест просто, но не очень удобно. Для начала для квеста нужно придумать ID - целое число. Для второстепенных квестов оно меньше -1000, для основных желательно делать его положительным (но не обязательно). ID квеста должен быть уникальным и отличаться от айдишников других квестов (все ID можно узреть в классе Quests). В классе Quests нужно описать квест в методах beginQuest и endQuest. В beginQuest создаётся объект квеста.
quest_pointer = new Quest(String name, String descr);
Первый аргумент - название, второй - описание (второй в ЗОА не используется, можно что угодно написать)
Затем нужно добавить в квест контрольные точки.
quest_pointer.addPoint(TypeQuest type, QuestProperties prop, String name); // один из примеров метода (там есть ещё пара перегруженных)
type - модель квеста, в которой хранится информация о прогрессе данной контрольной точки. TypeQuest - абстрактный класс, от которого наследуются все типы (PositionQuest, KillerQuest, ItemQuest, DialogQuest и т.д., все типы находятся в пакете org.mlge.quest.type)
prop - объект, в котором хранится информация о награде за выполнение данной контрольной точки (деньги, какие предметы появятся в инвентаре, какие уберутся).
name - если использовать данный аргумент, то при выполнении данной контрольной точки в сообщениях будет фигурировать этот параметр, а не название квеста (Задание обновлено: name и т.д.)

Затем нужно указать quest_pointer.type = ID; // ID - тот айди, который вы придумали для квеста

Всё это надо сунуть в условие
else if (n - ID == 0) {
       // .. = new Quest ( .....
         }


В endQuest() нужно в такой же условный блок сунуть обнуление ссылки на квест.

Квест создан и теперь нужно в нужный момент вызвать QuestManager.addQuest(ID);
- 4.11.2014 / 13:21
Zvers
  Пользователь

Zvers 
Сейчас: Offline
Вообще, чтобы найти рабочий баланс между скоростью загрузки и стабильностью, в пользовательском коде (не в движке) было использовано много вещей, ухудшающих декомпозицию и удобство программирования. Ну что поделать, на такое приходится идти в условиях небольшого количества ресурсов девайсов.
Поэтому если кто-то захочет добавить квест, советую хорошенько изучить структуру уже созданных квестов.
- 4.11.2014 / 15:21
ВитаминКО
  Супермодератор

ВитаминКО 
Сейчас: Offline
все так сложно и так круто :gg:
__________________
 わからない!!
- 4.11.2014 / 15:26
PLUTONiUM
  Пользователь

PLUTONiUM 
Сейчас: Offline
Оптимизировать игру, запилить новый сюжет, и go играть :gg:
- 4.11.2014 / 16:00
AGet
  Пользователь

AGet 
Сейчас: Offline
Ну нафиг, вынесли бы уровени в отдельные файлы...
- 4.11.2014 / 17:36
Zvers
  Пользователь

Zvers 
Сейчас: Offline
AGet, Ругались бы все на долгую загрузку, например, диалогов
- 4.11.2014 / 17:55
Zvers
  Пользователь

Zvers 
Сейчас: Offline
AGet, Стоп. В каком смысле уровни?
- 4.11.2014 / 19:09
RblSb
  Пользователь

RblSb 
Сейчас: Offline
Zvers, сейчас она тоже не шибко быстрая. Ты знаешь что большое количество классов вредно для бедных телефонов? 150 мать вашу классов без единого комментария его назначения -__-
И вот нафига делать в коде методы размером в одну строчку? Это уж точно скорости не прибавит. Да и отдельные классы с парой переменных. Наверно здорово каждый раз создавать экземпляр для обращения к ним. Почему же игра таким функционалом не блещет? Что это за код-мираж? Извращение...
- 4.11.2014 / 20:05
Zvers
  Пользователь

Zvers 
Сейчас: Offline
RblSb, Насчёт количества классов согласен, но без этого игра бы так и не вышла. В ходе работы много раз возникала необходимость что-то переделать, и только благодаря архитектурному подходу и гибкости движка это было возможным.
Лёгкие методы же, кстати, инлайнятся хорошо. Количество объектов лёгких классов пренебрежительно мало, так что это точно на производительность не влияет.
Вот все строки можно было бы в ресурсы засунуть, намного уменьшило бы размер самых "тяжёлых" классов. Но тут есть обратная сторона медали - мобильники не терпят динамических выделений памяти, а учитывая, что не везде есть дефрагментация (далеко не везде), это становится основной проблемой оптимизации (кстати говоря, если бы не это, игра вышла бы как минимум на год раньше), + пришлось бы долго грузить эти данные.

Если не обращать внимание на кашу кода в дефолтном пакете, с помощью данного движка можно быстро реализовать почти любую игру. Используя движок и утилиты, можно создать основной каркас игры за 5-10 минут. Если присмотреться, то там можно реализовать, например, любой вид инвентаря. Всё зависит от фантазии.
Наверх  Всего сообщений: 729
Фильтровать сообщения
Поиск по теме
Файлы топика (22)