Показать сообщение отдельно
Старый 20.10.2018, 16:51
Tails вне форума Посмотреть профиль Отправить личное сообщение для Tails Найти все сообщения от Tails
  № 18  
Ответить с цитированием
Tails
 
Аватар для Tails

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
Цитата:
Я верно понял, что объявление переменных в классах AttackData, AttackTypeData и UnitData публичными - это такой коммунистичный вариант реализации дата-класса, чтобы не запариваться с приватными переменными и комплектом сеттеров-геттеров? Меня смущает, что раз данные всё-таки из таблицы переписываются в поля класса для дальнейшего использования, нет риска, что они в процессе будут изменены и тем самым поломаны? Почему всё-таки не используешь приватные? Чтобы парсер передавал значения прямо в конструктор создаваемого дата-класса, а забирать геттерами?
В конструктор передаю только id, иначе потом не очень удобно работать. В парсере, например. Лучше обращаться по имени свойства. Сами свойства открывать/закрывать для прямого редактирования геттер/сеттерами - дело автора. Я вот решил для простоты не усложнять.

Цитата:
У тебя в момент запуска приложения все данные из json-таблиц читаются, парсятся и перегоняются в объекты-списки. Больше в рантайме исходные json-таблицы не используются, все классы Модели обращаются к классам-спискам, зная id нужных им вещей. Так?
Да, всё верно. Зачем каждый раз парсить JSON? Это будет очень накладно, неудобно и можно легко ошибиться из-за отсутствия типизации.

Цитата:
Формат json-таблицы тоже весьма нестандартный у тебя. Так как это не классическая 2-мерная таблица "ключ: значение", а наборы "ключ: массив значений". Чем ты создашь их? Только самописный редактор или есть какие-то варианты заполнять комфортно вручную и потом экспортировать в подобный формат?
Ключ - имя таблицы, массив - её записи. Этот json написал вручную. Для небольших структур данных это не сложно. На больших проектах я использую админку или редактор.

Цитата:
Твой вариант 100% отлично подходит для хранения справочных данных. А что ты делаешь с данными, которые меняются в рантайме? Тоже их по подобным спискам распихиваешь?
Данные в рантайме будут находиться в объекте World из этого примера. Там тоже будут аналогичные списки, только, они ещё будут пулять события (Унаследованы от EventDispatcher) при добавлении/удалении из списка, изменения их свойств и т.д. События нужны для тех, кому интересно что происходит в игровом мире. (Вьюшке, например)
Например, если класс UnitData описывает юнит, то представление конкретного юнита в рантайме будет что-то вроде:
Unit:
id - ID Юнита. (Не путать с UnitData.id)
unitID - ID Описания юнита. (Ссылка на UnitData)
life - Текущее здоровье этого юнита.
...

Например, если на карте будет 10 гоблинов, у нас будет 10 записей Unit:
{ id:1, unitID:2, life:55 }
{ id:2, unitID:2, life:45 }
{ id:3, unitID:2, life:100 }
...

Цитата:
P.S. Забыл... Почему обжекты хэшами называют?
Я называю. Потому что Object реализует интерфейс хеш-таблицы. (Ассоциативный массив)
https://ru.wikipedia.org/wiki/%D0%A5...B8%D1%86%D0%B0
__________________
Дети не должны знать о своих родителях