Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: [Architecture] Animation  (Lu 3750 fois)

0 Membres et 1 Invité sur ce sujet

flow10000

  • Newbie
  • *
  • Messages: 29
    • Voir le profil
    • Project Abyss
[Architecture] Animation
« le: Décembre 11, 2012, 09:39:19 pm »
Bonsoir,

Je suis actuellement sur un projet où beaucoup d’entités seront animées.

Une animation comporterait ces propriétés :

class Animation
{
public:
    Animation();
    void Draw(sf::RenderWindow& window)
   {
      window.draw(sprites[cursor]);
   }
   void Update();
protected:
   std::vector<sf::Sprite> sprites;
   int cursor;
}
 
l'idée étant de faire varier le cursor selon une sf::clock.
Première question, cette architecture vous parait elle viable ?

Secondement, sachant que je risque d'avoir de nombreux items identiques au même moment à l'écran, vaut il mieux passer une reference vers le vector de sprites l'animation aux entités ? ce qui éviterait de créer n copie des mêmes sprites.
Concrètement, un sf::Sprite utilise t'il beaucoup de mémoire ?

J'espère avoir été clair sur mes interrogations (notamment sur la deuxième partie).

D'avance merci pour votre aide qui m'est très précieuse et bonne soirée ;)


« Modifié: Décembre 12, 2012, 11:10:12 pm par flow10000 »

maju93160

  • Newbie
  • *
  • Messages: 30
    • Voir le profil
Re : [Architecture] Animation
« Réponse #1 le: Décembre 12, 2012, 09:25:12 pm »
Salut,
J'aurais une question.
Est-il bien d'écrire ici :
Citer
 Draw(sf::RenderWindow& window)
   {
      window.draw(sprites[cursor]);
   }

Aussi j'aimerais savoir les raisons qui t'on poussé à ne pas écrire
public:
car ça va passer en mode
private:
Merci de me répondre  ;)
C'est toujours bien d'apprendre des nouvelles choses grâces aux codes des autres  :P

flow10000

  • Newbie
  • *
  • Messages: 29
    • Voir le profil
    • Project Abyss
Re : [Architecture] Animation
« Réponse #2 le: Décembre 12, 2012, 09:55:28 pm »
Salut.
Je ne comprends pas bien ta première question.
Concernant la seconde, j'ai écrit la classe à la va vite, elle n'est qu'une version épurée de ce qui existe réellement. J'édite de suite, merci.

maju93160

  • Newbie
  • *
  • Messages: 30
    • Voir le profil
Re : [Architecture] Animation
« Réponse #3 le: Décembre 12, 2012, 10:10:20 pm »
Bonsoir,
Merci de m'avoir répondu sinon moi je pense pas qu'il y a trop d'erreur mais il est étrange d'avoir deux constructeur :
 Animation();
    Draw(sf::RenderWindow& window)
   {
      window.draw(sprites[cursor]);
   }
   Update();
Sinon pour la première question c'est bon j'ai compris j'avais oublié un petit détail ^^

flow10000

  • Newbie
  • *
  • Messages: 29
    • Voir le profil
    • Project Abyss
Re : [Architecture] Animation
« Réponse #4 le: Décembre 14, 2012, 09:45:29 am »
Et sinon, personne pour éclairer ma lanterne ?  :P
Bonne journée

Basta

  • Newbie
  • *
  • Messages: 48
    • Voir le profil
    • E-mail
Re : [Architecture] Animation
« Réponse #5 le: Décembre 17, 2012, 06:22:56 pm »
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  :P.

PS : J'utilise des pointeurs sur fonction, voidFnPtr est un typedef.
« Modifié: Décembre 17, 2012, 06:25:05 pm par Basta »

flow10000

  • Newbie
  • *
  • Messages: 29
    • Voir le profil
    • Project Abyss
Re : [Architecture] Animation
« Réponse #6 le: Décembre 17, 2012, 08:14:34 pm »
Hmmm merci pour ton exemple.

Finalement, la question est :
Vaut il mieux gérer un seul sf::sprite et faire varier son "subrect" ou alors un vector de sf::sprite ?
Si quelqu'un passe par là et peu nous éclairer :)

Bonne soirée


Edit :
Dans mon cas, la méthode de Basta ne pourrait être utilisé car bon nombre de mes animations utilisent des sprites ne provenant pas de la même texture. En effet, certaines animations sont tellement longues qu'elles sont stockés dans plusieurs fichiers .png
« Modifié: Décembre 17, 2012, 11:46:21 pm par flow10000 »

Basta

  • Newbie
  • *
  • Messages: 48
    • Voir le profil
    • E-mail
Re : [Architecture] Animation
« Réponse #7 le: Décembre 18, 2012, 01:16:05 pm »
Je ne crois pas qu'il y ai une limite concernant la taille d'un fichier png, mais je me trompe peut-être.

flow10000

  • Newbie
  • *
  • Messages: 29
    • Voir le profil
    • Project Abyss
Re : [Architecture] Animation
« Réponse #8 le: Décembre 18, 2012, 01:29:57 pm »
J'ai lu je ne sais plus ou que c'est selon les cartes graphiques.
Toutes les cg ne pourront pas charger une image qui fait 3000x3000 pixels par exemple.