Dans le constructeur je fais simplement :Et à quel moment est-ce que tu assignes autre chose qu'un pointeur nul à cette variable ?
m_horloge = nullptr;
Comme je n'ai pas trouvé le moyen avec sf::Clock de stopper le compteur, je le supprime et si sf::Clock n'existe pas, je renvoi 0. Comme le compteur est à 0, mon animation garde toujours la même frame. Je suis peut être pas très clair, je m'en excuse.C'est un peu bourrin pour faire ça. Mais bon y a une logique derrière ce choix, et comme tu le dis il vaut mieux expérimenter par soi-même ;)
Et à quel moment est-ce que tu assignes autre chose qu'un pointeur nul à cette variable ?Tout simplement dans la méthode void cHorloge::start() elle même appelée par cAnimation.play(). Si j'ai bien compris, le seul fait de créer le sf::Clock lance l'horloge, donc ça fait juste ce qu'il me faut.
Personnellement j'ajouterais un booléen m_isPaused et je garderai un sf::Clock simple, sans pointeur ni allocation dynamique.
Peux-tu m'expliquer pourquoi ce n'est pas réellement une bonne chose ?La gestion de la mémoire manuelle (new/delete) doit de manière général être évitée car c'est une source d'erreur potentielle. Il y a toujours une meilleure alternative, en l'occurence ici ne pas l'utiliser du tout :)
Oui, j'y ai pensé, mais je me suis dit que laisser tourner le sf::Clock alors qu'on ne l'utilise pas, et ça, sur chaque entité qui possède une animation n'est pas une bonne idée.sf::Clock ne "tourne" pas comme le ferait une vraie horloge physique. Quand tu fais start() elle récupère le temps absolu courant, et quand tu fais getElapsedTime() elle fait pareil et effectue la différence entre les deux temps. Entre les deux appels, il ne se passe strictement rien ;)
La gestion de la mémoire manuelle (new/delete) doit de manière général être évitée car c'est une source d'erreur potentielle. Il y a toujours une meilleure alternative, en l'occurence ici ne pas l'utiliser du tout :)Même dans ce genre de cas ou le risque d'erreur est très limité ? En effet, ici l'objet alloué dynamiquement n'est pas pointé par un autre objet. Je n'ai qu'un pointeur, je le créé avec start(), je le delete avec stop() et si il existe, je le détruit dans le destructeur.
sf::Clock ne "tourne" pas comme le ferait une vraie horloge physique. Quand tu fais start() elle récupère le temps absolu courant, et quand tu fais getElapsedTime() elle fait pareil et effectue la différence entre les deux temps. Entre les deux appels, il ne se passe strictement rien ;)Bon bin vendu alors ! :). Merci pour l'explication, je vais de ce pas modifier ça.
Même dans ce genre de cas ou le risque d'erreur est très limité ? En effet, ici l'objet alloué dynamiquement n'est pas pointé par un autre objet. Je n'ai qu'un pointeur, je le créé avec start(), je le delete avec stop() et si il existe, je le détruit dans le destructeur.Et le constructeur par copie ? L'opérateur d'affectation ? Le fait est que même si tu as besoin d'allocation dynamique, il n'y a pas de raison de ne pas au moins encapsuler ton pointeur dans un pointeur intelligent (unique_ptr, shared_ptr, ...).
Et le constructeur par copie ? L'opérateur d'affectation ? Le fait est que même si tu as besoin d'allocation dynamique, il n'y a pas de raison de ne pas au moins encapsuler ton pointeur dans un pointeur intelligent (unique_ptr, shared_ptr, ...).Etant donné que mes connaissances en la matière sont encore limités, je vais écouter tes conseilles. J'ai lu quelque part que le pointeur intelligent de boost corrige une faille du pointeur intelligent de la bibliothèque standard. Que me conseilles-tu sachant que je n'ai pas encore boost et que c'est une grosse bibliothèque pour de si petits projets ?