2010-08-23 4 views
4

Si vous avez une application avec une interface graphique travaillant totalement sur le dessin 2D, quelle devrait être la meilleure pratique pour gérer quoi dessiner et où toucher?Meilleure pratique: Modèle de conception pour la navigation d'écran HUD 2D

Un exemple pour mieux comprendre:
J'ai un jeu avec une carte. Sur cette carte, je peux construire des maisons et d'autres choses.
J'ai aussi une barre d'information qui peut être étendue. Sur la barre étendue, je dessine quelques informations sur le jeu et offre également l'interface pour changer différentes valeurs. Si un contact se produit, je dois vérifier si la barre d'information est étendue ou non, pour déterminer si je veux changer quelque chose sur la carte ou quelque chose sur la barre. C'est ce que fait le State Pattern, mais je doute que ce soit le bon, parce que je pense que cela peut être un peu complexe en raison de possibles "sous-états". Donc, fondamentalement, la question: est le modèle d'état (de GoF) la meilleure pratique pour gérer une interface graphique pure?

Répondre

2

La façon dont cela fonctionne généralement est que l'interface utilisateur est un arbre d'objets de contrôle. Chaque contrôle a une boîte englobante, et potentiellement un certain nombre de contrôles enfants qui flottent au-dessus. Lorsqu'un clic se produit, l'arbre est parcouru de haut en bas (ce qui signifie que les enfants avant les parents, et les frères et sœurs dans l'ordre). Pour chaque contrôle, vous voyez si le point intersecte sa boîte englobante. Si c'est le cas, donnez au contrôle une chance de gérer le clic (c'est-à-dire une méthode virtuelle OnClick). Si c'est le cas, arrêtez le traitement, ce clic est terminé. Sinon, continuez à marcher jusqu'à ce que vous arriviez à un contrôle qui le gère.

+0

C'est ce que j'ai fait pour être capable de construire et de positionner des choses sur la carte, mais ce n'est pas une réponse complète pour moi. Qu'en est-il des états qui déterminent, si une boîte englobante est même active? Dans votre cas, je dois gérer plusieurs états pour chaque objet de contrôle. Actuellement, j'essaie d'adapter le modèle d'activité d'Android pour mon cas. Chaque "écran" différent a sa propre implémentation d'état avec 'onTouch(), onDraw(), onStateChange()' – WarrenFaith

+0

La plupart des systèmes d'interface utilisateur auront aussi des états 'visible' ou' enabled' qui peuvent être définis sur un widget donné. La désactiver l'empêchera de recevoir des clics. La corvée maintient alors cet état activé en phase avec l'état du jeu d'arrière-plan qui l'affecte. Les systèmes d'événements peuvent y aider. – munificent

+0

cela sonne mieux ... Je vais essayer de l'implémenter de cette façon. THX – WarrenFaith

Questions connexes