Représentation de niveau appropriée / structure de données pour un jeu à plat 2D?


9

Je suis sur le point de programmer une copie de Mario en Java. Je pense à 2 représentations / structures de données pour les niveaux mais je ne sais pas lequel choisir:

  • Un tableau d'entiers 2D.
  • Un quadtree pour diviser le niveau en morceaux.

Quels sont ses avantages et ses inconvénients?

Réponses:


9

Le but d'un quadtree est d'éliminer efficacement de gros morceaux de données afin de ne passer que du temps sur les données à proximité immédiate. Cependant, un tableau 2D vous donne déjà un accès aléatoire spécifique à l'emplacement, donc pour un jeu 2D qui peut rendre un quadtree redondant. Dans un jeu 3D, vous ne pouvez pas utiliser un tableau pour tout localiser et c'est là que les quadtrees (ou mieux encore les octrees) sont pratiques.

Maintenant, je parle ici de la représentation sous-jacente des données pour le niveau. En fonction de la configuration de votre architecture graphique (par exemple, création de graphiques 2D avec des plans dans un moteur 3D), vous souhaiterez peut-être utiliser des arbres quadruples dans le graphique de la scène afin d'éliminer efficacement le contenu graphique.

Et puis n'oubliez pas divers ennemis et autres objets interactifs de votre niveau. Peut-être utilisez-vous un tableau 2D pour gérer les tuiles du niveau, mais utilisez des arbres quadruples pour organiser tous les éléments interactifs (par exemple pour un moteur physique).


Pensez-y de cette façon: choisissez un point au hasard dans votre niveau, puis réfléchissez au travail qu'il vous faudra pour tout comprendre dans un rayon de 1000 pixels de ce point. Si vous pouvez le faire rapidement parce que tout est organisé par emplacement dans un tableau 2D, vous n'avez pas besoin d'un quadtree. Si toutefois vous deviez parcourir tout et vérifier la distance de chaque objet individuellement, vous pourriez rendre la recherche beaucoup plus efficace en utilisant un quadtree.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.