Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 07.04.2018, 14:05
Appleman вне форума Посмотреть профиль Отправить личное сообщение для Appleman Найти все сообщения от Appleman
  № 1  
Ответить с цитированием
Appleman
 
Аватар для Appleman

Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
По умолчанию Вопрос по взаимодействию классов

Друзья! У меня ещё вопрос к опытным коллегам по проектированию и ООП.

Я почти закончил программировать в Модели базовый цикл игровой фазы: программа отбирает и выводит игроку доступные действия, принимает его выбор, инициализирует и запускает действие, далее оно "волшебит", обращаясь к экземплярам участвующих персонажей, проводит расчёты, выпускает события для Вью и предоставляет результаты. Результаты - это количественное изменение свойств персонажей. Остаётся только применить их и можно заходить на новую фазу.

Но есть одно но. Планируется, что помимо непосредственных результатов действий, изменения свойств персонажей подвержены некой дополнительной логике, выходящей за пределы результатов игровых действий. Например, каждую фазу может регенерироваться какое-то свойство (энергия, здоровье, не важно). Или может быть условие, что три подряд удачных атаки открывают доступ к какой-нибудь особенно мощной. И так далее. Суть в том, что одними результатами действия не ограничиться.

Пока придумалось создать новый класс типа "CharacterChangesProfile", который будет хранить перечень изменяемых в каждую фазу свойств персонажа, а также меру и какую-то логику их изменения. Тогда при завершении каждого действия Модель будет брать результат из класса действия и совмещать его с данными из профиля изменения. Вопрос в том, что я не могу понять, где должен создаваться и "жить" такой класс.

Есть класс Character, куда можно записать:

Код AS3:
private var changesProfile: CharacterChangesProfile = new CharacterChangesProfile();
Но меня смущает то, что во-первых, он и так у меня распух до неприличных размеров, а во-вторых, профилю изменений могут для работы потребоваться какие-то свойства персонажа. Такая получается стрёмная двухсторонняя связь с необходимостью классу Character давать какому-то собственному свойству ссылку на себя. Масло масленное.

Есть сама Модель, где можно сразу в момент создания, получив в конструктор участников, создать эти профили изменения и держать их при себе. Но тут беда в том, что свойства разных наследников Character могут отличаться (уже корю себя за это!), поэтому создать универсальный профиль не факт что получится, а городить проверки не охота.

Пока в качестве компромисса придумалась такая загогулина. Профиль изменений создаётся и живёт в экземпляре Character, но сам Character его никак не использует, а только хранит. Только по первому требованию отдаёт через геттер, а затем, если в профиль внесены изменения, записывает новый через сеттер.

Что думаете? Я уверен, моя проблема очень типичная для любого игродела. Спасибо.
__________________
Не сломано - не чини!

Создать новую тему Ответ Часовой пояс GMT +4, время: 02:07.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 02:07.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.