|
|
|||||
Регистрация: Jan 2012
Сообщений: 836
|
Цитата:
А уже в теле init создаем модель и заносим туда данные из даты. Изменения хп, маны, урона и прочие модификации с переменными воспроизводятся внутри MEnemy. |
|
|||||
Godwarlock,
Я пропагандирую немного другой подход. В нём все данные не собираются в одну модель/объект, а разносятся по составляющим на отдельные списки/таблицы, связи между которыми реализованы по принципу реляционной модели данных. Дело в том, что объектная модель, на определённых масштабах проекта начинает сильно мешать/усложнять жизнь. В реляционной модели всё просто и масштабируется без проблем. Ей не нужны сериализаторы, она не обрастает комом запутанных связей через наследование или интерфейсы. В ней код не содержит данные, а только обрабатывает их. И ещё, сколько памяти будет занимать твой объектный гоблин? Помимо его собственных данных, это будет ещё и EventDispatcher и вся цепочка наследования. Мой гоблин - это всего несколько байт. 2 UInt и 1 Float.
__________________
Дети не должны знать о своих родителях |
|
|||||
Регистрация: Jan 2012
Сообщений: 836
|
Tails понял твою задумку. В общем у тебя просто используется json в котором забиты все рантаймовые состояния противника. Этот объект можно передавать куда угодно и совершать какие-либо действия над ним. А что если информация из json-а не будет соответствовать логике? Например подставили другой json в обработчик, который изменяет hp, но hp у данной даты нету? Или придется проводить проверки на все состояния?
Я о том, например Или я не совсем вкурил, как используется такой подход |
|
|||||
При чём тут json? Это просто формат для передачи данных. Вся структура данных описана в самом приложений, json только заполняет их. Что будет, если подсунуть некорректный json? Тоже, что и если вставить флешку в разьём видеокарты. Я не пробовал
Json вообще никак не используется в рантайме. Он нужен только для того, чтобы передать данные игры с жёсткого диска/сети в наше приложение. Если какой-то юнит в принципе может дамажиться, значит, все они имеют это поведение, так-как класс Unit абстрагирован и представляет вообще любой возможный юнит в игре. Если при этом, какие-то юниты дамажиться не должны (неуязвимы), значит мы добавляем такой признак в их описание: UnitData.invulnerable, который будет проверяться при попытке нанести юниту урон.
__________________
Дети не должны знать о своих родителях Последний раз редактировалось Tails; 20.10.2018 в 21:08. |
|
|||||
Регистрация: Jan 2012
Сообщений: 836
|
Tails
Вместо объектной типизированной модели для каждого айтема списка, ты просто всё закидываешь в объектный массив и по геттеру получаешь нужный айтем со всеми его свойствами из данного массива. Но придется где-то записывать, какие свойства хранит данный итем или придется постоянно чекать сам json и искать итем по нему, чтобы узнать о свойствах, чтобы где-то их применить. В целом суть понял. Подход неплохой, учитывая что сам объект можно еще будет и зашифровать по необходимости и расшифровывать когда это нужно. |
|
|||||
Посмотри пример во вложении:
http://www.flasher.ru/forum/showpost...1&postcount=16
__________________
Дети не должны знать о своих родителях |
|
|||||
Регистрация: Jan 2012
Сообщений: 836
|
Tails посмотрел. Просто я не понял ты написал
Цитата:
Добавлено через 9 минут Приведи пример, как ты создашь со свой структурой 50 гоблинов и функцию, в которой описана логика по вычитанию у рандомного гоблина 5хп. Так будет яснее. Последний раз редактировалось Godwarlock; 20.10.2018 в 21:47. |
|
|||||
Суть даты не только в инициализации начальных значений переменных, она шире, она описывает тип юнита. Каждый отдельный UnitData - это отдельный вид юнита. Каждый Unit - должен содержать ссылку (в ввиде unitID) на свой тип, к которому он принадлежит.
Самый простой пример: // Интерфейс класса World // Создание юнита: function unitCreate(id:uint):Unit { var data:UnitData = _gameData.units.getElementByID(id); var unit:Unit = new Unit(++_autoID); unit.unitID = id; unit.life = data.life; _units.add(unit); return unit; } // Нанесение урона юниту: function unitDamage(id:uint, value:Number):void{ var unit:Unit = _units.getElementByID(id); unit.life -= value; }
__________________
Дети не должны знать о своих родителях |
|
|||||
Регистрация: Jan 2012
Сообщений: 836
|
Tails всё понятно. Вопросов нет. Я думал ты создаешь объект var enemy:Object = new Object(); enemy = {id:UnitData.id,hp:UnitData.hp}; и изменения проводишь именно в нем, а ты создаешь такую же класс-модель, как и у меня. Это и ввело меня в заблуждение.
Последний раз редактировалось Godwarlock; 20.10.2018 в 22:45. |
|
|||||
Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
|
Всем пардон, я удалил исходный вопрос, пока Tails писал на него ответ.
Я спрашивал о том, что используя реляционную модель хранения данных, в классе Модели должны оставаться только методы без полей. А если например, метод расчёта урона, который наносит гоблин (т.е. не значения дамага из справочника, а что-то типа вероятности попадания или какие-то ещё модификаторы), отличается от аналогичного для мага? Как тогда обойтись без наследования классов юнитов в Модели?
__________________
Не сломано - не чини! |
Часовой пояс GMT +4, время: 07:22. |
|
« Предыдущая тема | Следующая тема » |
|
|