Forum de la communauté SFML

Général => Projets SFML => Discussion démarrée par: Vidou le Juin 09, 2021, 11:52:34 am

Titre: Animation de tiles.
Posté par: Vidou le Juin 09, 2021, 11:52:34 am
Bonjour à tous.

Dans le but de passer le temps, je m'amuse à réaliser un "Mario like" (Super original me direz vous...).

Je créé mes maps avec Tiled et les lis et affiche avec les bibliothèques "TMX parser" et "TSX parser".

Mon souci est que j'ai des tuiles animées et je ne trouve aucun tuto ou bribe de code qui indiquent comment gérer ces animations.

J'ai quelques idées mais j'aimerais avoir votre avis si c'est correct ou voir si il y a pas plus simple ou mieux à faire.

Dans Tiled je créé mes animations et les enregistre dans mon fichier tsx.

Quand je lis ma map (enregistrée dans un tableau X,Y,Z (Z étant le numéro de calque)), je vais voir les propriétés de la tuile à afficher, propriétés qui se trouvent dans un tableau (image de mon fichier tsx).

Si c'est une tuile animée, alors je réalise l'animation.

Pour faire un essai, j'ai 4 tuiles animées que je souhaite afficher.
Cette animation se fait sur 4 images différentes.

J'ai donc essayé de faire ceci (sans gérer le temps pour le moment) :

mes animations sont sous forme anim0 = tuile X, anim1 = tuile X+1, etc...

Créé une variable temporaire image de ma tuile animée (varTemp).

Cherche le numéro X de la tuile a afficher en position X,Y,Z.
Si ma tuile numéro X est animée,
  Si varTemp < numéro X
    Enregistre le numéro de ma tuile dans varTemp.
  Sinon
    varTemp++
 
  Si varTemp == numéro X + 4
    varTemp = numéro X
 
numéro X = varTemp

affiche (numéroX).


en gros ça fonctionne MAIS comme mon animation est sur 4 blocs et que j'affiche 4 blocs, j'ai chaque bloc qui me prends une valeur de tuile et j'ai pas d'animation. premier bloc = anim 0 second bloc anim 1 etc... et quand reviens le premier bloc, varTemp = numéro X donc on reviens a la première image de l'animation.

J'ai donc pensé à faire un std::map d'une structure "animation" avec comme identifiant la valeur X,Y,Z.
De ce fait, j'aurais mes 4 blocs indépendants avec une animation distincte entre eux.
Mon problème c'est que je créé 4 fois la même animation (1 foi par bloc) et ça me semble pas optimisé.
Si je me retrouve avec 30 blocs identiques, j'ai 30 fois la même chose de stocké en mémoire. Pas cool.

du coup je me demande si c'est la bonne solution, ou si j'ai TOUT faux ?

Merci pour vos retours et de m'avoir lu jusque ici.



Titre: Re: Animation de tiles.
Posté par: MO9845 le Juin 09, 2021, 06:20:37 pm
Si j'ai bien compris, tu veux changer de tuiles à une certaine fréquence. Si c'est ça, tu peux utiliser une variable qui contient le numéro de la tuile et la changer tous les par exemple 1 seconde en créant un sf::Timer et en appelant restart() à chaque changement de tuiles
Titre: Re: Animation de tiles.
Posté par: Vidou le Juin 11, 2021, 09:32:05 pm
C'est un peut plus compliqué que ça mais j'ai fini par m'en sortir.

Je savais a peut près comment faire, je voulais être sur que ce soit correct et optimisé et pas gourmand en ressources.

Merci :).