Показать сообщение отдельно
Старый 07.09.2017, 01:13
Appleman вне форума Посмотреть профиль Отправить личное сообщение для Appleman Найти все сообщения от Appleman
  № 6  
Appleman
 
Аватар для Appleman

Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 483
Цитата:
Сообщение от Nooob Посмотреть сообщение
Еще рекомендую почитать "ActionScript 3.0. Шаблоны проектирования (Сандерс Уильям, Кумаранатунг Чандима)" или
"Приёмы объектно-ориентированного проектирования. Паттерны проектирования (Эрих Гамма, Ричард Хелм, Ральф Джонсон, Джон Влиссидес)" старая правда, но неплохо так вставляет.
За книжки спасибо, уже качнул, почитаю в спокойном режиме. Но всё остальное, если честно, больше запутало, чем внесло ясности.

Цитата:
Data - библиотека классов статической константной информации, к которым можно обратиться по ссылке, не изменная и общедоступная, в целом это то что Wolsh назвал Description
Как понимать "библиотека классов"? Это фигура речи или есть какая-то специальная реализация подобных вещей? В любом случае, это получается несколько классов со статичной информацией, типа справочников, из которых определённым образом выдёргиваются нужные элементы. Я правильно понимаю?

Цитата:
Итого получается следующая иерархия:
-data
--BattleData содержится информация например сколько должно быть персонажей, время боя и тд.
--CharacterData содержится информация о первоначальном здоровье, скорости, силе и тд.
Извини, если вопрос покажется идиотским, но я во второй раз о терминах. "Иерархия" - это условное понятие для проектировщика или ты имеешь в виду иерархию типа наследования классов?

Цитата:
Сообщение от Wolsh Посмотреть сообщение
Сделать константы нормально, но только "1" это бессмысленная вещь. Подумай о том, как ты будешь это использовать, в какой ситуации? По этой константе ты сможешь вытянуть описание из класса Descriptions, но сможешь ли вытянуть значение из Персонажа? Нет)) Для этого надо знать название свойства. Так что логичнее было бы хранить в такой константе название свойства, например строку "strength".
Это я понял. Естественно, отдельный класс с соответствующим методом для выбора по идентификатору и значению. У меня логика следующая. Если думать о будущей поддержке нескольких языков, то нужен некий идентификатор не только для описаний тех или иных значений свойства персонажа: "умный", "дурак", "так и сяк", но и для самого названия игровой характеристики ("Ум" в русской версии, "Intelligence" в английской). Поэтому я рассудил, что для каждой игровой характеристики должен быть уникальный идентификатор, по которому можно будет вытащить как её название для интерфейса, так и описание к возможным значениям. Получается, что в классе Description метод getHint будет вызываться с передачей в него ID характеристики и её значении для конкретного персонажа (featureID:uint, value:number). И он из первого массива featureNames с названиями самих характеристик по featureID=1 со второй позиции вытащит "ум", чтобы вывести пользователю, а затем обратится в массив с описаниями, где по этому же featureID=1 выдаст нам ещё один массив с пороговыми значениями и описаниями (10, "полный кретин", 20, "дурачок", 30, "имбецил"), из которого мы по value подберём нужный вариант.

Прочитав написанное тобой, возникло два очень важных вопроса:
1. Категорически не понял, как можно по строковому идентификатору вытащить значение из персонажа? Получается, что если в классе персонажа прописано свойство public var strength, то в другом месте программы мы можем создать строковую переменную var feature:String = "strength" и, написав, 'имя экземпляра'.feature, мы сможем обратиться к экземпляру класса? А как же использование Set и Get методов, инкапсуляция и всё такое?
2. Вторая идея, почему я предпочёл использовать в качестве идентификаторов целые положительные числа uint, заключается в том, что я не могу представить себе иного способа организованно хранить данные и обращаться к ним, кроме как с помощью массивов. А индекс массива - это всегда число типа uint. Даже в твоём примере ты обращаешься к массиву, т.е. должен в какой-то момент перейти от строки к числу. Или нет?

Цитата:
Да, если имя и фамилия это игровая константа, как Гордон Фримен в Half Life. Но, например в Oblivion или Skyrim игрок сам придумывает имя своему протагонисту.
А в чём принципиальная разница? Опять же, если задавать для персонажа только идентификатор, а имена хранить в отдельном классе, то значения в этот класс могут попасть как из заранее заготовленного XML на нужном языке, так и в результате ввода пользователем. Разве одно мешает другому? Этот же идентификатор может использоваться и для подтягивания графики (условно портрета в интерфейс), и всего остального. Главное - обеспечить, чтобы во всех классах, по которым разбросаны данные, связанные с персонажем, соблюдалось единство этих самых идентификаторов. Поэтому я и спрашивал, где объявлять соответствующие константы или переменные.