Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   реализация специфического поведения (http://www.flasher.ru/forum/showthread.php?t=215623)

Appleman 04.07.2018 11:23

реализация специфического поведения
 
Друзья!

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

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

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

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

ZergMaster 04.07.2018 12:59

Ну, если у нас уже есть экземпляр, то чтобы временно изменить свойства персонажа, можно оборачивать его в Декоратор.. Будет какой-нибудь var zombie = ZombieDecorator(character). И подменять им персонажа. Декоратор будет модифицировать воздействия нужным образом.
Либо, если хочется скрыть все это внутри персонажа, то можно и внутрь него внедрить декоратор. При этом публичные методы не будут знать, с кем именно они работают - они будут работать просто с интерфейсом iChar каким-нибудь. Просто в какой-то момент ты будешь подменять чара декоратором

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

Appleman 05.07.2018 09:42

ZergMaster, спасибо.

СлаваRa 05.07.2018 10:39

Декоратор - нужен для динамического добавления функциональности объекту к его основной.
Адаптер - приводит один интерфейс к другому.

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

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

Appleman 05.07.2018 11:37

Цитата:

Сообщение от СлаваRa (Сообщение 1205669)
UPD
ну и тут ситуация в двух словах: "объект поменял свое состояние из-за чего поменялось его поведение"

СлаваRa, спасибо, исчерпывающе. Концепт понятен. Пойду освежу соответствующий шаблон, чтобы на его базе что-нибудь замутить.

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

СлаваRa 05.07.2018 11:51

Цитата:

Как уважаемая аудитория относится к назначению свойств-маркеров, влияющих на поведение объекта?
Я не знаю как это интерпретировать, поэтому никак к этому не отношусь.

Appleman 05.07.2018 12:37

Ну вот так:

Код AS3:

public class SomeClass
{
private var _multMode: Boolean;
 
function someCalculation(value1: Number, value2: Number) : Number
{
if (_multMode) return value1 * value2;
else return value1 + value2;
}
}

То есть когда в классе заводятся свойства, значение которых определяют поведение. В общем то, что ты предложил, но в таком топорном варианте :)

ZergMaster 05.07.2018 13:25

СлаваRa
прикольно. Примерно это я и имел ввиду, когда говорил про декоратор внутри чара, и чтобы был метод changeDecorator, который подменивает методы. Адаптер подходит в том смылсе, что мы как раз соединяем два интерфеса - интерфейс зомби накладываем на интерфейс чара.
Но да, паттерн State тут подходит идеально, это именно он и есть, просто я его не знал/забыл, вот и вывалил велосипед. )

Appleman 05.07.2018 17:51

Главное ограничение шаблона "Состояние" - это организация состояний как взаимоисключающих элементов, в соответствии с теорией конечных автоматов. Теперь нужно покумекать над реализацией пребывания объекта одновременно в нескольких состояниях :)

СлаваRa 05.07.2018 18:01

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


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

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