Работа со многими объектами - PullRequest
1 голос
/ 02 марта 2012

Я делаю стратегическую игру и столкнулся с некой проблемой.По сути, я не знаю, как бороться с динамическим созданием нужных мне юнитов.Должен ли я использовать какой-то большой оператор switch или есть более идеальное решение?

Ответы [ 3 ]

2 голосов
/ 02 марта 2012

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

Один из вариантов:

Вы управляете картой (в основном, объектом), где ключ - это идентификатор вашей «единицы», а значение - объект класса., вот так:

var unitMap:Object = {
    "hero": UserGameCharacter,
    "enemy": NPCharacter,
    "chicken": ChickenCharacter
};

Обратите внимание, что значения являются объектами класса, а не экземплярами.Кроме того, давайте предположим, что все классы символов либо расширяют базовый класс символов, либо реализуют интерфейс символов.Теперь, когда вы хотите создать «юнит», вы должны сделать это:

var newCharacter:Character = new (unitMap["hero"])();

Таким образом, вам больше не нужен оператор switch.Надеюсь, это поможет в качестве отправной точки.

1 голос
/ 03 марта 2012

Возможно, вы захотите взглянуть на движок PushButton, который предоставит некоторые готовые функции для работы со всеми игровыми объектами. Он имеет функции внедрения зависимостей, что является хорошей практикой для разделения использования и создания объектов.

https://github.com/PushButtonLabs/PushButtonEngine

1 голос
/ 02 марта 2012

Если вы хотите динамически создавать несколько типов объектов, требующих строительных работ, старайтесь всегда использовать абстрактную фабрику. Это сделает игру более гибкой и модульной. Специально для стратегической игры у вас может быть сложная логика, которая строит каждое из подразделений. Проверьте статью ниже:

http://www.as3dp.com/2010/11/saturated-abstract-factory-1-wholesale-creation/

...