Fermer2
OrwellLe 15/08/2004 à 23:36
Salut tout le monde smile

Voilà ca fait quelque temps que je bosse sur un jeu de plateau (une adaptation du jeu Sonic, en fait smile), et je cherche a optimiser certains aspects du prog, notamment la gestion des collisions entre le perso et le decor et/ou les objets presents à l'écran. Gerer des sols planes et des murs tout droits ca pose généralement peu de problèmes, par contre dès qu'on s'amuse avec des sols en pente, des courbes ou même des loopings, ca devient un peu plus casse-tête couic

Ma map est divsisée en tiles, et j'utilise 3 octets par tile: texture, obstacle & objet. En pratique, un obstacle présent sur un tile est un "mur" de 1 ou 2 pixels de large sur le coté ou en travers du tile a travers lequel le perso peut toujours passer dans un sens (et pas dans l'autre). J'ai donc par exemple une valeur (entre 0 et 255) pour signaler que le perso peut traverser le coté haut du tile de bas en haut (et donc qu'il est bloqué s'il veut traverser de haut en bas), une autre pour caractériser le coté gauche, une autre pour les 2 cotés en meme temps etc...
Le perso est alors matérialisé par un rectangle dans la zone de l'écran, et pour chaque déplacement de 1 pixel dans une certaine direction je dois tester si le coté correspondant du rectangle est en contact avec un obstacle dans la map (cad qu'il faut tester chaque tile couvert en partie par le coté du rectangle).

Tout ca represente pas mal d'opérations a effectuer pour chaque déplacement d'un seul pixel dans une direction, mais pour le moment les résultats sont assez bons, surtout avec les sols planes et les murs droits évidemment... le systeme fonctionne aussi avec des sols en pente mais c deja moins pratique :/ Par contre j'aimerais bien pouvoir intégrer des courbes etc, et là je pense que ce systeme ne pourra plus convenir du tout...

D'autant plus qu'ici, je ne teste généralement qu'une seule direction à la fois, donc dans le cas des pentes par exemple c'est plus délicat puisqu'il faut que le perso puisse suivre la pente sans passer à travers ni voler par dessus... Alors pour les courbes c'est déjà une autre histoire :/

J'ai pensé à d'autres solutions que de découper les obstacles en tile (genre faire des "blocs" 'pente', 'sol', 'creux', 'quart de rond'...) mais je vois pas trop ce qui pourrait etre le plus efficace...

Comme je pense que pas mal de programmeurs ici se sont dejà amusés à faire un jeu de plateau dans ce genre-là, ca serait bien d'avoir des idées ou des conseils sur des méthodes envisageables pour ce genre de fantaisies... smile

Je pensais au problemes des objets aussi: dans sonic, le perso doit pouvoir marcher sur le dessus d'un bonus comme il le ferait sur un sol normal par exemple, il faut donc que les intéractions entre le perso, la map et les objets soient assez souples pour permettre ca aussi...

Voilà si vous avez déjà réfléchi à cette question pour un jeu de plateau ou quoi, ca m'intéresserait d'avoir votre avis sur la façon d'implémenter tout ça smile