Question

Je suis sûr qu'il ya une solution de modèle de conception à mon problème, mais je ne peux pas sembler décider une approche viable est. Je sais ce que je veux, je suis juste avoir du mal à faire les connexions ... Je vais vous expliquer:

Je travaille sur un jeu. Je GameObjects. Je GameBehaviors. Les propriétés de mes GameObjects sont définies dans un fichier XML qui a tous les détails.

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

Alors comme gameobject est instancié, en fonction de la valeur de la propriété de comportement dans le XML, il en quelque sorte a le comportement attaché. J'ai besoin du comportement pour pouvoir accéder à toutes les propriétés de son parent, de telle sorte qu'il peut dire déplacer l'objet autour et ce qui ne ...

Je n'ai pas beaucoup d'expérience avec des modèles de conception ... et un certain nombre d'entre eux semblent comme ils sont presque droite, mais aucun des exemples que je l'ai lu semblent faire un déclic pour moi.

Je travaille avec AS3, mais ne hésitez pas à le rendre peu plus général.

Était-ce utile?

La solution

Je suggestion composition à l'aide, même si votre objectif principal devrait être de trouver une bonne solution (fiable, extensible et maintenable) plutôt que d'utiliser un modèle de conception nommé.

Ainsi, votre objet de jeu pourrait avoir une méthode, ou peut-être a une méthode de fabrication statique initFromXML (xml) qui prend XML comme argument. Cette analyse le xml et recherche comportements et crée alors le comportement approprié. Création du comportement pourrait se faire avec une autre usine.

Vous pouvez ensuite ajouter le comportement au jeu des objets liste des comportements. Pourraient tous être Behaviors objets descendants d'une classe commune, ou ils pourraient tout mettre en œuvre une interface IBehavior.

peuvent faire leur Behaviors chose soit en étant appelé par objet de jeu, ou en ajoutant des écouteurs d'événement.

Autres conseils

Je pense que je comprends votre approche.

Il revient beaucoup dans les jeux parce que vous avez un nombre infini d'effets, de l'état, les comportements, etc., potentiellement.

Ce que je vois dans votre problème est que vous traitez plus avec des choses fonctionnelles comme « ce que cela suit cette souris », « ne répond pas aux commandes ce clavier », etc ...

Dans ce cas, ce que vous pouvez faire est de créer des classes fonctionnelles comme « MouseFollower » ou « KeyboardResponder » qui acceptent génériquement un gameobject comme argument de leur constructeur.

Ces objets peuvent ensuite appliquer des gestionnaires d'événements directement à la gameobject tels que EventListeners.

Vous pouvez stocker tous vos objets fonctionnels dans un tableau dans le gameobject au cas où vous devez les supprimer.

Quand ils sont dans un tableau, vous pouvez également faire refroidir encore aimez créer une interface de classe fonctionnelle avec un ensemble uniforme de méthodes. Donc, si, par exemple, le gameobject ont été rendus inactifs ou désactivé, on peut dire

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

Je suppose que cette approche serait tolérable si vous aviez une variété vraiment énorme d'objets de jeu, et je suppose un RPG serait un exemple décent où vous gérez un très grand nombre de sprites de fonctionnalités différentes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top