Bonjour.
Ces jours-ci, je fais des tests afin de développer, plus tard, mon premier vrai jeu, qui devrait être un shoot-em-up 2D programmé en C++. Rien de très original mais peu importe pour l'instant. Mais ma question est applicable a d'autres types de jeu et de langages.
Je voudrais savoir quelle est, selon vous, la meilleure structure de données afin de gérer les objets (graphiques ou non) qui composent mon jeu.
Je cherche une structure de données qui permet d'ajouter/supprimer environ 100 objets/seconde, d'effectuer des tests de collision le plus rapidement possible, et d'afficher les objets dans le bon ordre.
Pour cela, dois-je séparer mes données en fonction du type d'objet ? Par exemple :
1 - Collection d'objets appartenant a l'UI (menu, boutons, score, ...).
2 - Collection d'objets dynamiques (ennemis, tirs du joueur (beaucoup/seconde), tirs des ennemis, vaisseau du joueur, ...).
3 - Collection d'objets statiques sujets aux tests de collision (murs qui bloquent les joueur/ennemis et leur tirs, ...).
4 - Collection d'objets statiques non sujets aux tests de collision (background, animation d'explosion des ennemis, ...).
Devrais-je fusionner les collections 2 et 3 vu qu'ils sont sujets aux tests de collision ? Mais les objets du groupe 2 doivent pouvoir être ajoutés/supprimés très vite, tandis que les objets du groupe 3 ne changent pas beaucoup, mais peuvent être en grande quantité (beaucoup de "tile" de mur) ...
Devrais-je fusionner aussi avec la collection 4 ? Car si je sépare tout ça, comment faire pour afficher les objets dans le bon ordre ?
Peut-être devrais-je séparer ainsi :
1 - Couches ("layer") arrière-plan.
2 - Couche du jeu (contenant joueur + ennemis + murs).
3 - UI.
Pour le type de collection d'objets, j'ai pensé à un graphe triangulé a l'aide de l'ami Delaunay. Est-ce une bonne idée ? Si oui, quelle bibliothèque utiliser ? CGAL ou Triangle qui sont en licence GPL (je préfèrerais éviter) ou Boost.Graph et implémenter moi-même Delaunay ? C'est pas un peu compliqué ?..
Ou bien une table de hachage ? Une map triée ? Un bête tableau de vecteurs ferait l'affaire ?
Est-ce que je me pose trop de questions stupides ?
Partager