2011-09-14 1 views
1

Je crée un jeu RPG basé sur 2D. Semblable à celle de Pokemon pour Gameboy. Fondamentalement, mes cartes de jeux sont créés par x par x taille terrain. Il y a aussi des objets de paysages (arbres, arbustes, etc.) ainsi que des objets insolubles (panneaux, portes, objets, etc.). À l'heure actuelle, j'ai codé ces objets. Le problème est que chaque fois que j'ajoute un objet de décor, une mosaïque de terrain ou autre chose, il me faut passer en revue et ajouter une classe, spécifier des données différentes, etc. Fondamentalement, je me sens comme je dois faire beaucoup de tâches répétitives pour faire quelque chose de si simple. J'ai peur que plus tard, mon projet devienne ingérable. Chaque partie de nouveau terrain, paysage ou autre objet hérité d'une classe appelée 'GridElement'. Donc, serait-il préférable d'avoir toutes les informations de tuile, de décor, etc. placées dans un fichier XML externe et chargées au moment de l'exécution, ou de continuer à coder ces éléments en dur?Est-il préférable de coder en dur ou de laisser les fichiers XML externes?

Le problème principal est que la plupart de ces éléments requièrent des fonctions spécifiques à leur appliquer. Certains d'entre eux ont besoin d'appeler des événements quand ils sont intervenus. Certains éléments sont également dynamiques (le carreau change toutes les deux secondes, par exemple l'eau, la fleur, etc.).

Merci pour l'aide!

À la votre!

+0

@Mike Kwan, merci pour l'édition. Je n'ai même pas remarqué l'erreur :) – FreeSnow

Répondre

2

En règle lâche, vous devez créer une nouvelle classe que lorsque vous voulez représenter le comportement et contrôler les paramètres de cette classe avec vos données.

Dans votre cas, vous voulez probablement une classe de décor pour vos fleurs, arbustes, murs et autres choses. Vous pouvez ensuite personnaliser les objets de cette classe en appelant des fonctions pour définir le (s) bitmap (s), la vitesse d'animation. Peu importe alors d'où proviennent ces données, elles peuvent être codées en dur, provenir d'une fabrique d'objets ou être lues depuis xml.

Lorsque vous accédez à vos objets interactifs, vous avez besoin de classes supplémentaires, mais essayez de les rendre plus génériques que spécifiques. Donc, si vous voulez afficher un message lorsque votre utilisateur interagit avec un objet, vous avez une classe d'interaction générique, plutôt qu'une classe de signes. Cette classe peut ensuite être utilisée pour des enseignes, des étagères, des objets mystérieux.

Quand il s'agit d'événements spéciaux, vous avez quelques options. Le plus simple est de créer une classe d'événement générique, qui peut diriger de nouveaux acteurs à apparaître à l'écran ou à conférer des objets sur le lecteur. Alternativement, vous pouvez passer un pointeur de fonction/déléguer à l'objet qui est appelé lorsque l'utilisateur frappe certains déclencheurs (c'est-à-dire, entrer dans un carré, vaincre un monstre).Enfin, le plus compliqué de tous, mais très probablement ce que Pokemon et jeux similaires utilisent, vous pouvez créer/utiliser votre propre langage de script.

+0

Donc, je pense que je comprends ce que vous dites. Alors suggérez-vous que j'utilise XML pour les tuiles, les objets de décor, etc. et que j'utilise un langage de script (par exemple Lua) pour travailler avec tous les événements d'interaction, les animations, etc.? J'aime vraiment cette idée. J'allais implémenter Lua dans une partie postérieure du projet, mais j'aime beaucoup ton idée. – FreeSnow

+0

Je voudrais utiliser XML ou un format de fichier si vous créez un moteur de jeu réutilisable - mais vous n'avez pas à le faire prématurément! Assurez-vous d'avoir un bon noyau de jeu en premier, est-ce amusant, cela vaut-il la peine d'être extensible? Pendant que vous construisez cela, je voudrais simplement coder en dur les données. Si vous absentez tout ce code de création d'objet (c'est-à-dire une fabrique d'objets), vous pouvez facilement l'extraire et le remplacer par votre analyseur xml plus tard. – DanDan

+0

La principale difficulté avec tout cela, c'est qu'il a un éditeur de carte intégré. Je veux que beaucoup de choses soient possibles, comme l'ajout de nouvelles choses et autres. Je vais probablement aller de l'avant et commencer à construire un système comme ça bientôt, pas encore, mais bientôt. De cette façon, quand le moment viendra, il sera beaucoup plus facile de travailler avec. Je vais aller de l'avant et présenter Lua dans mon programme. – FreeSnow

2

Il est préférable de mettre des données dans des fichiers de données et d'écrire votre code pour traiter ces fichiers de données. Il y a plusieurs raisons: vous avez fait allusion à une, que les données sont plus gérables de cette façon (c'est-à-dire qu'elles seront mieux organisées et plus faciles à trouver). Un autre avantage important est qu'il rend les données plus faciles à modifier. Lorsque vous travaillez avec d'autres personnes, cela fait une énorme différence, mais même lorsque vous travaillez individuellement, il est beaucoup plus facile de modifier toutes vos valeurs de jeu quand ils sont dans les fichiers de configuration plutôt que dans le code lui-même. Vos avertissements signifient que vous devrez souvent avoir des classes séparées pour les différents types d'éléments, puis référencer ces classes dans le fichier XML; par exemple:

<grid_element> 
    <class>GrassElement</class> 
    <image>dark_grass.png</image> 
    <xpos>10</xpos> 
    <ypos>10</ypos> 
</grid_element> 

mais autant que possible s'éloigner des choses codées en dur et le faire dans des fichiers de données. Par exemple, les différents événements qui s'appellent peuvent être définis dans le fichier XML:

<step_event>somethingOrOther</step_event> 
+0

Puis-je obtenir une explication pour cela. Je ne cherche pas seulement une réponse, j'ai besoin d'une raison pour cela. Désolé :) – FreeSnow

+0

J'ai ajouté quelques raisons. Il y a plus de raisons, mais celles-ci sont les plus importantes qui me viennent à l'esprit. – jhocking

Questions connexes