Je développe une Metroidvania 2D qui consiste en une série de niveaux interconnectés qui peuvent être revisités.
Chaque niveau est représenté par un fichier Tiled TMX dans lequel j'ai spécifié où divers objets de différentes classes de sprites apparaissent (par exemple, ennemis, micros, leviers, etc.). Lors du démarrage d'une nouvelle partie, du chargement d'une partie enregistrée ou de la modification d'un niveau, ma boucle de jeu parcourt le fichier TMX approprié et génère tous les objets de ce niveau.
Je gère les changements de niveau de la manière suivante: Si l' Player
objet croise un Portal
objet, une change_map()
méthode est appelée qui charge une nouvelle carte (celle associée au portail intersecté) et positionne le joueur à la position appropriée sur la nouvelle carte.
Certains de mes objets ont des états que j'aimerais persister à travers les changements de niveau et la sauvegarde et la fermeture du jeu. Par exemple, si un joueur déverrouille une porte et que l'attribut d'état de la porte est défini sur "ouvert", je voudrais que la porte soit ouverte lorsque le joueur revient. Je veux quelque chose de similaire pour les leviers, qui peuvent être réglés à gauche ou à droite, et divers autres objets. De plus, le joueur aura parfois récupéré des objets que je ne veux pas réapparaître lorsque le joueur revisite la zone.
Ma question est donc comment puis-je gérer ce type de persistance?
Je travaille en Python, bien que je pense que vous pouvez vous en éloigner.
la source
properties
champ que vous modifiez à la place et utiliser uniquement les tuilesproperties
comme indication de la propriété à modifier (mais toutes les données sont stockées dans votre sprite). Vous pouvez également simplement passer la tuile à votre sprite afin que vous puissiez modifier la tuile à partir du sprite :) si ce n'est pas clair ce que je veux dire, je peux simuler un peu plus de pseudocode