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

Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
Ребята, давайте я чуть подробнее своё решение опишу, а вы покритикуйте.

Вот смотрите. Если у меня в классе Character есть свойство _strength, отвечающее за силу, то я, написав
Код AS3:
public function get strength(): uint {return _strength}
сразу же открываю класс IDs и вписываю туда статическую константу
Код AS3:
static public const PROP_STRENGTH: String = "strength"
Всё. Теперь где бы мне ни потребовалось передать обращение (подчёркиваю, не обратиться, а именно передать необходимость обращения) к свойству силы, я знаю как это сделать. Например, я записываю таблицу условий на выполнение действия или использования предмета в вектор:
Код AS3:
_activeConds.push(new ACRange(IDs.PROP_STRENGTH, 15)); //Наследник класса проверки условий
В каждом из наследников есть метод проверки переданного в конструктор условия. Метод refreshActions() в Модели пробежит их все, и если хотя бы по одному получит false, кнопка действия будет неактивной.

А если в результате какого-то действия нужно изменить силу на -5, то я могу добавить экземпляр класса
Код AS3:
new PropUpdates(IDs.PROP_STRENGTH, -5);
и вызвать у Character метод

Код AS3:
private function parsePropUpdates(updates: Vector.<PropUpdates>) : void
{
for each (var update:PropUpdates in updates) this[update.PropID] += update.value;
}
При этом использование констант в общедоступной библиотеке гарантирует от того, что я назавтра забуду, как правильно называется свойство, отвечающее за силу. Это я в хелпе про события подсмотрел. Там же точно такой же принцип заложен - обращаться к константам вместо непосредственно строк. Плюс с таким подходом я могу хоть в XML какие-то конструкции передать, хоть ещё как-нибудь. Как-то так...
__________________
Не сломано - не чини!


Последний раз редактировалось Appleman; 17.05.2018 в 16:59.