Partage
  • Partager sur Facebook
  • Partager sur Twitter

Affichage dans un jeu 2D vue de dessus

    9 juillet 2019 à 12:54:48

    Bonjour,

    J'ai un petit souci d'efficacité. J'aimerais coder un petit jeu 2D vu de dessus (à la manière de FF 1 à 6, Chrono Trigger etc). J'ai une architecture Model View Controler pour mon code.

    Pour chaque élément visuel du jeu (les différentes couches de la map, les PNJ, le héros etc) je passe à mon Controler un objet de type Observer (HeroObserver, PNJObserver etc). Chaque Observer a une méthode print qui dessine l'élément visuel en question. Le Controler a une méthode render qui a pour mission d'appeler les méthodes print dans le bon ordre : dessiner les éléments au sol, puis dessiner par desus les PNJ et le héros, puis dessiner par dessus les éléments en hauteur les oiseaux, etc. La boucle du jeu appelle cette méthode render.

    Maintenant, pour les éléments visuels qui sont à la même hauteur virtuelle, par exemple le héros et tous les PNJ, la règle est la suivante : on affiche du nord au sud. Par exemple si mon héros est plus au sud qu'un PNJ, il sera dessiné après, et ainsi sa tête sera dessinée par dessus les pieds du PNJ.

    Le sol, puis les PNJ, puis les feuillages...

    Le sol, puis les PNJ et héros, puis les feuillages, puis les oiseaux, puis l'interface

    Problème : les PNJ et le héros bougent sur la map. Et donc l'ordre dans lequel les dessiner sur l'écran peut théoriquement changer à chaque tour de boucle du jeu. Pour l'instant je fais ça (et j'ai l'impression que ce n'est pas du tout propre mais bon) : la méthode render commence par un tri sur tous les éléments de même profondeur. Et donc cela fait un tri à chaque tour de boucle du jeu!

    Y'a-t-il quelque chose de plus malin à faire?

    Merci d'avance de vos réponses

    -
    Edité par Zebolt 9 juillet 2019 à 12:59:09

    • Partager sur Facebook
    • Partager sur Twitter

    Affichage dans un jeu 2D vue de dessus

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown