2010-01-08 2 views
0

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

Я работаю над игрой. У меня есть GameObjects. У меня есть GameBehaviors. Свойства моих GameObjects определены в XML-файле, который содержит все детали.

<type name="Object"> 
    <unit name="follower" behavior="followMouse" > 
     ...other unit info here... 
    </unit> 
</type> 

Так как геймобжекты конкретизируются, на основе стоимости имущества поведения в XML, он какой-то образом имеет поведение, прикрепленное к ней. Мне нужно поведение, чтобы иметь доступ ко всем свойствам его родителя, чтобы он мог сказать, перемещать объект вокруг, а что нет ...

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

Я работаю с AS3, но не стесняйтесь сделать его более общим.

ответ

0

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

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

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

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

+0

На данный момент я даю ответ. Это тема с множеством решений, поэтому я разочарован отсутствием разнообразия, но это, безусловно, хорошая рекомендация. – grey

0

Я думаю, что я понимаю ваш подход.

Это очень много в играх, потому что у вас есть бесконечное количество эффектов, статуса, поведения и т. Д., Потенциально.

То, что я вижу в вашей проблеме вы имеете дело более функциональные вещи, как «делает это следовать этой мыши», «делает это реагировать на команды с клавиатурой», и т.д ...

В таком случае, что вы можете do создает такие функциональные классы, как «MouseFollower» или «KeyboardResponder», которые в общем случае принимают GameObject как аргумент своего конструктора.

Эти объекты затем могут применять обработчики событий непосредственно к GameObject, такие как eventlisteners.

Вы можете хранить все свои функциональные объекты в массиве в GameObject, если вам нужно их удалить.

Когда они находятся в массиве, вы также можете сделать круто, как создать функциональный класс Интерфейс с единым набором методов.Так что если, например, GameObject были оказаны неактивными или отключенными, можно сказать, что

for each IFunctionalObject in GameObject.FunctionalObjects 
IFunctionalObject.disable() 

Я думаю, этот подход был бы терпимо, если у вас действительно огромное разнообразия игровых объектов, и я полагаю, РПГ будет достойный пример, когда вы управляете огромным количеством спрайтов различной функциональности.

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