D'après ce que j'ai compris un sf::Sprite ne fait qu'utiliser une image, et c'est l'image (sf::Image) qui prends de la place et dont les modifications sont délicates, mais je pense qu'il vaut mieux tout de même passer par des références que par des copies dès qu'on s'éloigne des types du genre int, double, string, etc.
Après pour ce qui est de l'architecture ce n'est pas comme cela que j'aurais fait :
/*!
\class Animation
\brief gere les mecanismes des animations
*/
class Animation
{
public:
Animation(const sf::Clock*, sf::Sprite&, sf::Vector3f subrects);
Animation(const sf::Clock*, sf::Sprite&, sf::Vector3f subrects, int period);
Animation(const sf::Clock*, sf::Sprite&, sf::Vector3f subrects, sf::Vector2f pos);
Animation(const sf::Clock*, sf::Sprite&, sf::Vector3f subrects, sf::Vector2f pos, voidFnPtr startFn, voidFnPtr eachFn, voidFnPtr endFn);
Animation(const sf::Clock*, sf::Sprite&, sf::Vector3f subrects, sf::Vector2f pos, int period, voidFnPtr startFn, voidFnPtr eachFn, voidFnPtr endFn);
void test(); /*!< teste et actualise l'animation \warning a appeler a chaque actualisation de l'objet concerne */
void play(); /*!< lance l'animation */
void stop(); /*!< arrete l'animation */
bool isPlaying();
protected:
voidFnPtr m_startFn; /*!< fonction appelee a chaque debut d'animation */
voidFnPtr m_eachFn; /*!< fonction appelee a chaque periode de l'animation */
voidFnPtr m_endFn; /*!< fonction appelee a chaque fin d'animation */
sf::Sprite *m_spr; /*!< sprite subissant les modfifications */
sf::Vector3f m_subrects; /*!< x = largeur d'un cadre, y = longueur, z = nombre de cadres/phases */
sf::Vector2f m_pos; /*!< position dans le sprite du premier cadre */
int m_period; /*!< temps separant chaque phase */
int m_startTime; /*!< temps de départ */
bool m_playing; /*!< statut de l'animation */
const sf::Clock *m_clock;
};
Ce n'est pas du tout la même approche et je ne sais pas ce qui est le mieux, bonne réflexion
.
PS : J'utilise des pointeurs sur fonction, voidFnPtr est un typedef.