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

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

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

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

Друзья!

Я рискну ещё раз описать словами ситуацию в надежде получить дельный совет, хотя уже и сам понимаю, насколько это неблагодарное занятие - давать советы, не зная деталей проекта. И тем не менее.

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

У меня сделан и работает вариант, когда текущие статус-эффекты модифицируют свойства самого персонажа - в геттере прописан запуск метода, перебирающего все действующие статус-эффекты и собирающего в кучу модификаторы соответствующего свойства.

А вот как в обратную сторону сделать? Наследование и переопределение сеттера не подходит, т.к. подобное поведение является временным. Понятно, что если подобные эффекты единичны, то можно и if вкатать да проверить, но как-то это не по-православному.
__________________
Не сломано - не чини!

Старый 04.07.2018, 12:59
ZergMaster вне форума Посмотреть профиль Отправить личное сообщение для ZergMaster Найти все сообщения от ZergMaster
  № 2  
Ответить с цитированием
ZergMaster
 
Аватар для ZergMaster

Регистрация: May 2008
Адрес: Питер
Сообщений: 385
Отправить сообщение для ZergMaster с помощью ICQ Отправить сообщение для ZergMaster с помощью Skype™
Ну, если у нас уже есть экземпляр, то чтобы временно изменить свойства персонажа, можно оборачивать его в Декоратор.. Будет какой-нибудь var zombie = ZombieDecorator(character). И подменять им персонажа. Декоратор будет модифицировать воздействия нужным образом.
Либо, если хочется скрыть все это внутри персонажа, то можно и внутрь него внедрить декоратор. При этом публичные методы не будут знать, с кем именно они работают - они будут работать просто с интерфейсом iChar каким-нибудь. Просто в какой-то момент ты будешь подменять чара декоратором

Добавлено через 2 часа 26 минут
а еще можно через по умолчанию пустой Адаптер все влияния, такие, как дамаг и прочее.. И при разных воздействии просто втыкать нужный адаптер в метод setAdapter - ZombieAdapter, IceAdapter, VampierAdapter, StoneAdapter и т.п. ..
__________________
while(live()) { hope(); }

Старый 05.07.2018, 09:42
Appleman вне форума Посмотреть профиль Отправить личное сообщение для Appleman Найти все сообщения от Appleman
  № 3  
Ответить с цитированием
Appleman
 
Аватар для Appleman

Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
ZergMaster, спасибо.
__________________
Не сломано - не чини!

Старый 05.07.2018, 10:39
СлаваRa вне форума Посмотреть профиль Отправить личное сообщение для СлаваRa Найти все сообщения от СлаваRa
  № 4  
Ответить с цитированием
СлаваRa
 
Аватар для СлаваRa

блогер
Регистрация: Feb 2008
Адрес: http://playtika.com
Сообщений: 1,119
Записей в блоге: 5
Отправить сообщение для СлаваRa с помощью ICQ Отправить сообщение для СлаваRa с помощью Skype™
Декоратор - нужен для динамического добавления функциональности объекту к его основной.
Адаптер - приводит один интерфейс к другому.

@ZergMaster как у вас структурные шаблоны стали поведенчискими, для меня остается загадкой.

UPD
ну и тут ситуация в двух словах: "объект поменял свое состояние из-за чего поменялось его поведение"
__________________
местонахождение

Старый 05.07.2018, 11:37
Appleman вне форума Посмотреть профиль Отправить личное сообщение для Appleman Найти все сообщения от Appleman
  № 5  
Ответить с цитированием
Appleman
 
Аватар для Appleman

Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
Цитата:
Сообщение от СлаваRa Посмотреть сообщение
UPD
ну и тут ситуация в двух словах: "объект поменял свое состояние из-за чего поменялось его поведение"
СлаваRa, спасибо, исчерпывающе. Концепт понятен. Пойду освежу соответствующий шаблон, чтобы на его базе что-нибудь замутить.

Вопрос вдогонку. Как уважаемая аудитория относится к назначению свойств-маркеров, влияющих на поведение объекта?
__________________
Не сломано - не чини!

Старый 05.07.2018, 11:51
СлаваRa вне форума Посмотреть профиль Отправить личное сообщение для СлаваRa Найти все сообщения от СлаваRa
  № 6  
Ответить с цитированием
СлаваRa
 
Аватар для СлаваRa

блогер
Регистрация: Feb 2008
Адрес: http://playtika.com
Сообщений: 1,119
Записей в блоге: 5
Отправить сообщение для СлаваRa с помощью ICQ Отправить сообщение для СлаваRa с помощью Skype™
Цитата:
Как уважаемая аудитория относится к назначению свойств-маркеров, влияющих на поведение объекта?
Я не знаю как это интерпретировать, поэтому никак к этому не отношусь.
__________________
местонахождение

Старый 05.07.2018, 12:37
Appleman вне форума Посмотреть профиль Отправить личное сообщение для Appleman Найти все сообщения от Appleman
  № 7  
Ответить с цитированием
Appleman
 
Аватар для Appleman

Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
Ну вот так:

Код AS3:
public class SomeClass
{
private var _multMode: Boolean;
 
function someCalculation(value1: Number, value2: Number) : Number
{
if (_multMode) return value1 * value2;
else return value1 + value2;
}
}
То есть когда в классе заводятся свойства, значение которых определяют поведение. В общем то, что ты предложил, но в таком топорном варианте
__________________
Не сломано - не чини!

Старый 05.07.2018, 13:25
ZergMaster вне форума Посмотреть профиль Отправить личное сообщение для ZergMaster Найти все сообщения от ZergMaster
  № 8  
Ответить с цитированием
ZergMaster
 
Аватар для ZergMaster

Регистрация: May 2008
Адрес: Питер
Сообщений: 385
Отправить сообщение для ZergMaster с помощью ICQ Отправить сообщение для ZergMaster с помощью Skype™
СлаваRa
прикольно. Примерно это я и имел ввиду, когда говорил про декоратор внутри чара, и чтобы был метод changeDecorator, который подменивает методы. Адаптер подходит в том смылсе, что мы как раз соединяем два интерфеса - интерфейс зомби накладываем на интерфейс чара.
Но да, паттерн State тут подходит идеально, это именно он и есть, просто я его не знал/забыл, вот и вывалил велосипед. )
__________________
while(live()) { hope(); }

Старый 05.07.2018, 17:51
Appleman вне форума Посмотреть профиль Отправить личное сообщение для Appleman Найти все сообщения от Appleman
  № 9  
Ответить с цитированием
Appleman
 
Аватар для Appleman

Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
Главное ограничение шаблона "Состояние" - это организация состояний как взаимоисключающих элементов, в соответствии с теорией конечных автоматов. Теперь нужно покумекать над реализацией пребывания объекта одновременно в нескольких состояниях
__________________
Не сломано - не чини!

Старый 05.07.2018, 18:01
СлаваRa вне форума Посмотреть профиль Отправить личное сообщение для СлаваRa Найти все сообщения от СлаваRa
  № 10  
Ответить с цитированием
СлаваRa
 
Аватар для СлаваRa

блогер
Регистрация: Feb 2008
Адрес: http://playtika.com
Сообщений: 1,119
Записей в блоге: 5
Отправить сообщение для СлаваRa с помощью ICQ Отправить сообщение для СлаваRa с помощью Skype™
Вот представь, что есть физически здоровые люди, с расстройством психи. Его физическое состояние в норме, его психологическое состояние нет, но они не исключающие друг друга, как например живое не может быть мертвым и наоборот, все всегда зависит от постановки(формулировки) задачи.
__________________
местонахождение

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

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

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


 


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


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