Pregunta

Estoy seguro de que hay una solución patrón de diseño a mi problema, pero me parece que no puede decidir lo que es un enfoque viable es. Yo sé lo que quiero, estoy teniendo problemas para hacer las conexiones ... Voy a explicar:

Estoy trabajando en un juego. Tengo GameObjects. Tengo GameBehaviors. Las propiedades de mis GameObjects se definen en un archivo XML que tiene todos los detalles.

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

Así como GameObject se instancia, basado en el valor de la propiedad de comportamiento en el XML, alguna manera tiene el comportamiento que se le atribuye. Necesito el comportamiento para poder acceder a todas las propiedades de su padre, de modo que pueda decir mover el objeto y lo que no ...

No tengo mucha experiencia con los patrones de diseño ... y un número de ellos parecen como si estuvieran casi correcto, pero ninguno de los ejemplos que he leído parecen hacer un clic para mí.

Estoy trabajando con AS3, pero no dude en hacerlo poco más general.

¿Fue útil?

Solución

Me había sugerencia usando la composición, aunque su objetivo principal debe ser la búsqueda de una solución buena (confiable, extensible y mantenible) en lugar de utilizar un patrón de diseño llamado.

Por lo tanto el objeto del juego podría tener un método initFromXML (XML), o tal vez tiene un método de fábrica estática que toma como argumento XML. Este analiza el XML y busca comportamientos y después crea el comportamiento apropiado. La creación de la conducta se podría hacer con otra fábrica.

A continuación, añadir el comportamiento en el juego objetos de la lista comportamientos. Comportamientos podrían ser todos los objetos descendientes de una clase común, o todos ellos podrían implementar una interfaz IBehavior.

Los comportamientos pueden hacer sus cosas, ya sea por ser llamado por objeto juego, o mediante la adición de los detectores de eventos.

Otros consejos

Creo que entiendo su enfoque.

Esto aparece mucho en los juegos porque tiene un número infinito de efectos, el estado, comportamientos, etc., potencialmente.

Lo que veo en su problema es que se trata más con las cosas funcionales como "tiene esto siga este ratón", "¿Esto responde a los comandos del teclado", etc ...

En ese caso, lo que puede hacer es crear clases funcionales como "MouseFollower" o "KeyboardResponder" que genéricamente aceptar un GameObject como argumento de su constructor.

Esos objetos pueden entonces aplicar controladores de eventos directamente a la GameObject como EventListeners.

Puede almacenar todos sus objetos funcionales en una matriz dentro de la GameObject en caso de que necesite para eliminarlos.

Cuando están en una matriz, también se puede hacer todavía fresco, como crear una interfaz de clase funcional con un conjunto uniforme de métodos. Así que si, por ejemplo, el GameObject se vuelven inactivos o con discapacidad, se podría decir

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

Creo que este enfoque sería tolerable si has tenido una muy gran variedad de objetos del juego, y supongo que un juego de rol sería un ejemplo decente donde se está administrando un gran número de sprites de funcionalidad variable.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top