Цитата:
|
СлаваRa, caseyryan, согласен, подход - дерьмо.
Цитата:
Давайте я попробую привести ещё пример и задать вопрос. Изначально в классе Character были прописаны свойства из "досье", которые остаются неизменными (сила, интеллект), свойства, отслеживающих текущие параметры (энергия, ХП), скиллы. От такой огромной простыни (сами свойства, сеттеры/геттеры, методы обработки) у меня класс сильно "распух". Чтобы всё это хозяйство организовать, придумалось раскидать свойства не нескольким новым классам. Но возникла новая проблема. У меня происходит много обращений за значениями свойств, переданных как параметры. Наиболее типичный случай - класс проверки условий доступности игровых действий. Вот его пример: Код AS3:
Или я вас не правильно понял, и главный объект критики - это подход, при котором запросы текущих значений свойств сделаны через их строковые идентификаторы? |
Цитата:
|
Отлично! Друзья, я вам буду очень признателен за любую наводку на более "красивое" решение.
Я попытался максимально компактно и доходчиво сформулировать ниже, почему у меня активно применяются строковые ID. Класс игрового действия состоит из 3-х компонентов: справочных данных (ActionData), а также 2-х персонажей, один из которых - "актор" (кто активно действует), а второй - "реципиент" (кто принимает эффект от действия). Вот смотрите кусочек класса ActionEntity: Код AS3:
ActionData (наследник класса ADEntity) - содержит "справочные" данные действия. Они неизменны, и теоретически их можно (и наверное нужно) вообще из кода перенести куда-нибудь, но сейчас не об этом. Важно, что там формулируются условия нескольких видов: критические (при их невыполнении действие не будет создано), видимости (действие не будет выведено игроку) и активности (действие будет неактивно). Вот как это сделано сейчас: Код AS3:
Вот маленький кусочек кода, где создаётся действие рукопашной атаки: Код AS3:
В классе ActionEntity запуск проверки условий выглядит так: Код AS3:
Добавлено через 21 час 11 минут Посидел-подумал... Вот такой вариант проверки условий придумался без использования строковых идентификаторов. Код AS3:
|
Не читал последнее сообщение, но
обращайся напрямую через компоненты, например: character.progression.xp Либо создай псевдо-свойства в базовом классе с геттерами, которые будут вызывать геттеры соответствующего свойства в его компоненте Добавлено через 3 минуты Но на компоненты имеет смысл делить, когда есть еще и дополнительная функциональность, связанная с этими свойствами, иначе получаем запах "Data Object". Если ее нет, но свойств слишком много, проверь принцип одной обязанности - класс должен отвечать только за что-то одно. Например, раньше у меня класс игрока содержал две абсолютно несвязанные друг с другом части - представление прогресса игрока и его раскачки и представление игрока в бою (с хп, маной и т. д.). Потом я их разделил на два класса |
Вроде интерфейсы прям-таки и напрашиваются.
|
Часовой пояс GMT +4, время: 14:59. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.