2012-04-07 2 views
2

Я делаю RPG с поворотом во Flash, с AS 3 в качестве языка, хотя я уверен, что вы можете мне помочь, независимо от языка, который вы используете.Предпочтительный способ управления данными, классами или массивами?

В принципе, моя идея состояла в том, чтобы поместить все данные моего оружия в один многомерный массив. Теперь, если я хочу добавить оружие в свой инвентарь, я просто использую inventoryArray.push(weaponArray[1]) Легко, я просто добавил оружие в свой инвентарь.

Я изучал образцы дизайна, и кажется, что большинство проектов ООП используют классы и наследуют от суперкласса. Component-->Weapon-->Sword-->LongSword.

С чем я должен работать, помещая все данные в один массив или используя стиль наследования с одним классом, содержащим одно оружие?

Любые идеи приветствуются! Я в основном знаю, как сделать игру сам по себе, ее просто, что я не знаю некоторые шаблоны, с которыми мне следует идти.

+0

Является ли это побочный проект для Вас?Если это, я бы превратил его в учебную сессию. Возьмите день или четыре и прочитайте образцы дизайна, чтобы найти те, которые лучше всего работают с AS3, а затем выделяют те, которые будут работать с вашей игрой. Вы обнаружите, что вам понадобится хотя бы немного наследования, как заявил Лоран. –

+0

Да, это учебная сессия. Я не могу создавать игры без проблем, но я просто решил броситься в темную бездну ООП. – Secret

ответ

2

Большинство объектов в вашей игре будут иметь некоторые общие свойства - например, возможно, у всех будет идентификатор, имя и описание.

Если вы не используете наследование, у вас будут все ваши классы, имеющие эту дублируемую информацию, что затруднит вашу игру.

Если вы используете наследование, вы можете использовать все эти общие свойства в базовом (возможно абстрактном) классе и унаследовать от него все остальные классы. Так что да, шаблон дизайна, на который вы смотрели, - это путь.

Кроме того, вместо inventoryArray.push(weaponArray[1]), вы также должны создать класс Inventory с использованием метода add(). Это позволит вам отправлять события, когда объект добавляется в инвентарь. Затем передняя часть может прослушивать это событие и, например, обновлять графику инвентаризации. В общем, вы никогда не должны использовать общие объекты Flash (Array, Object и т. Д.) Для потенциально сложных объектов, таких как инвентарь, символы и т. Д. Использование ваших собственных пользовательских классов позволяет вам легко расширять их по мере того, как ваша игра становится более сложной.

+0

Является ли шаблон глубокой иерархии лучшим способом для такого рода вещей? Как насчет композитов? – Secret

+0

Эти два шаблона не являются взаимоисключающими. Скорее всего, вам понадобится иерархия классов, и вы также можете использовать составной шаблон (лично я бы избегал, чтобы все было просто). –

+0

Хорошо спасибо. Еще один быстрый вопрос, но все вещи под моим классом меча просто меняют данные (например, меняют вес и повреждают другое значение). Будет ли класс для каждого оружия «меча» изменяться только в данных предпочтительнее? Я надеялся на что-то вроде списка всего оружия «меч», но я думаю, что добавление нового оружия будет проще, так как мне просто нужно добавить другой класс вместо изменения моего списка. Извините, если мой вопрос немного неоднозначен. – Secret

1

Я бы сказал, что композиция над наследованием - это путь.

Существует базовый класс игрового объекта, который может быть распространен на оружие, кольца, шлемы, щиты, зелья и т. Д. Все они имеют набор ограничений, которыми можно управлять через наследование (например, тот факт, что вы можете разместить оружие в рук и инвентаря). Но способности всех этих (как они влияют на характер) должны выполняться с помощью композиций. Каждый раз, когда вы добавляете объект к створке, руке, голове и т. Д., Они влияют на характер через композицию. Поэтому, когда вы имеете дело с действием персонажа, вы не прокручиваете каждый объект, вы просто используете составную функцию, такую ​​как атака, которая имеет все функции инвентаря, которые применяют часть действия символа.


Другой образец дизайна, который вы можете изучить, - это узор декоратора. Я нахожу, что результат очень похож на композицию. «В то время как шаблон декоратора позволяет нам добавлять обязанности к объектам без подкласса, составной шаблон имеет другую цель: структурировать классы, чтобы обрабатывать связанные объекты одинаково, а несколько объектов можно рассматривать как один».source

пример декоратор: http://www.as3dp.com/2011/06/well-armored-warrior-decorator-for-beginners/

Смежные вопросы