|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Feb 2011
Сообщений: 11
|
Ищу правильный подход к решению задачи. (Куда копать?)
Не хочется изобретать велосипед - не верю что подобные задачи не имеют общепринятых принципов решения. А вот знания о них мне и не хватает. Итак:
Имеется необходимость реализовать что-то вроде рюкзака содержащего предметы. Предметы разные, состоят из разных свойств, и при условном "применении" выполняют разный код. Предметы могут валяться в игровых зонах или могут быть получены в результате отработки каких-то событий. Как подошел к решению: Имеется класс Backpack - со свойством в виде массива из BaseItem, и с методами позволяющими добавить удалить или использовать один из объектов типа BaseItem. Имеется класс BaseItem - общий класс описывающий что такое предмет. Без конкретики. У него есть такие свойства как вес, и т.д. И метод doUse - в котором описано что предмет делает когда его применяют. У этого, базового класса - пустой. Имеется набор классов с собственно предметами, расширяющие класс BaseItem. Для примера - MediKid extends BaseItem. В нем добавлены пара свойств характерных только для него, и обязательно переопределяется метод doUse - у каждого предмета действие свое. Вроде бы получается стройная система. Есть только одно "но": как сгенерировать новый предмет на основе обстановки в игре, если данные об обстановке у меня предполагаются XML? Т.е. я не могу прямо записать в описании комнаты кусок кода - Backpack.addItem = new MediKit; ... В в описании обстановки может быть только текст (ну или несколько полей с текстом - не суть важно). А хочется чтобы получив этот текст и найдя в нем название класса "MediKit" (написаный текстом - String) некая функция могла вернуть мне новый экземпляр MediKit, который можно будет запихнуть в рюкзак и т.д. Это вообще возможно сделать не закапываясь в костыли с тупым перебором всех возможных вариантов названий через swicth или последовательности else if? Не прошу готовое решение - просто, если кто хотя бы знает каком направлении гулгить, подскажите пожалуйста. За что зацепится? Может существует что-то типа JavaScript-овского eval... |
|
|||||
Регистрация: Aug 2008
Адрес: Рязань
Сообщений: 723
|
если верно понял вам нужна ф-я getDefinitionByName, почитайте flash.utils
__________________
low + |
|
|||||
Цитата:
import flash.utils.getDefinitionByName; ... var className:String = "MediKit"; var ClassRef:Class = getDefinitionByName(className) as Class; if(ClassRef) return new ClassRef(); return null; Такой подход работает, если ресурсы расположены в одном ApplicationDomain с исполняемым кодом (код и ресурсы в одном swf). Если это не так, делайте то же самое через ApplicationDomain#getDefinition()
__________________
...вселенская грусть Последний раз редактировалось gloomyBrain; 15.02.2011 в 17:49. |
|
|||||
Регистрация: Feb 2011
Сообщений: 11
|
О да, getDefinitionByName это как раз то, что нужно. Огромное спасибо.
А интерфейсы... Я задумывался, но у меня там выходит сильно завязано на базовый класс. Львиная доля функционала именно в нем, в классах конкретных предметов за исключением doUse, лишь дополнения, причем практически все - нестандартные получаются. Наследование как-бы само просится на логику работы... |
|
|||||
Цитата:
Вот представьте - человек обедает и вместо того, чтобы подносить ложку ко рту, говорит ей: "Давай-ка опустись в тарелку, зачерпни там супа (только лавровый лист не надо, он несъедобный), а потом подлетай ко рту, подожди пока я тебя опустошу и потом повторяй это процесс, пока я не наемся или пока суп не кончится". Итак, ложка должна - уметь воспринимать информацию - уметь летать - отличать лавровый лист от всего остального - понимать когда человек наелся - понимать когда суп кончился - ... А не многовато ли это для обычной ложки? =) Извините за такую абстракцию, но суть в том, что должен быть кто-то, кто умеет и знает как использовать предмет и должен быть сам предмет. Эти 2 понятия никак не могут сочетаться. По сему замечание про фабрику очень уместно - с её помощью можно формировать команды и отдавать их "исполнителю". Исполнитель, глядя на команду что-то делает. Исполнитель может меняться, все зависит от команды (и, соответственно, от предмета), однако, он в любом случае должен уметь применять предмет. Что же касается самих предметов, то они, в моем понимании, должны быть не более чем набором данных, из которого можно сформировать команду.
__________________
...вселенская грусть |
|
|||||
Регистрация: Feb 2011
Сообщений: 11
|
Цитата:
Цитата:
Признаю, что функций при таком подходе, как для простого контейнера больше получается, и расход памяти по идее намного больше... Но универсальность по прикидкам выше, а это пока перекрывает для меня такой недостаток. А если это вытащить в фабрику - получается усложнение кода, т.к. надо сначала выяснить что мы получили для использования, а уже потом - как оно действует, и на данного конкретного индивида в частности... Вот, если бы каждый предмет применялся только для одной цели - такой подход на мой взгляд был бы равноценен. А так - усложнение кода на порядок. |
|
|||||
Цитата:
Цитата:
А вообще любые аналогии - это аналогии. Я говорю о том, что предмет не может сам взять и примениться. Он должен быть кем-то применен. Как он будет применен - зависит от исполнителя. Согласитесь, в реальной жизни это так.
__________________
...вселенская грусть |
|
|||||
Регистрация: Feb 2011
Сообщений: 11
|
Цитата:
Тогда как если проверка выполняется штанами - это один простой кусок кода, который всегда даст нужный ответ, даже с теми существами которых на момент проектирования штанов еще не было. И если появится производная от человека, скажем китаец, штаны на него будут одеваться автоматически. На мой взгляд, если объектов на которые может применяться предмет, может быть много, причем применение возможно только на строго определенные, то как минимум проверку должен проводить сам предмет, если не хотим лишнего кода. Функционал можно и перенести, но такие вещи как всегда одинаковое действие вещества таблетки, тоже, логичнее на мой взгляд описывать в самой таблетке. От исполнителя не зависит, будет это вещество вообще работать, или нет. Будет. Как - вопрос другой. Если один из вариантов подразумевает ответ "у всех остальных - так", и этих остальных может быть на порядок больше, то этот функционал - хороший кандидат на описание прямо в предмете. Особенно если он еще и несложный. По моему так. Цитата:
Цитата:
|
Часовой пояс GMT +4, время: 09:49. |
|
« Предыдущая тема | Следующая тема » |
|
|