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

Auteur Sujet: Conteneur de sf::Drawable - fonction draw()  (Lu 1402 fois)

0 Membres et 1 Invité sur ce sujet

Zekko

  • Invité
Conteneur de sf::Drawable - fonction draw()
« le: Juin 03, 2015, 06:11:41 pm »
Bonjour à toutes et tous !
J'aimerais créer une classe héritant de sf::Drawable dont la fonction est de contenir des sf::Drawables.
Elle hérite donc de sf::Drawable, de sf::Transformable et de std::vector<sf::Drawable*> puisque qu'il s'agit d'un conteneur.

Fichier Container.h :
(click to show/hide)
Fichier Container.cpp :
(click to show/hide)

Le problème vient de la fonction update(). En effet, pour remplir ma sf::RenderTexture, il me faudra utiliser la méthode create(unsigned int width, unsigned int height, bool depthBuffer=false). Mais quelles dimensions lui donner ?
Ou plutôt : Comment connaitre les dimensions des sf::Drawables du conteneur ?
Car par leur nature, je n'ai pas accès aux fonctions des sf::Transformables comme getGlobalBounds().
Et si je fais un conteneur de sf::Transformables*, je ne pourrais pas utiliser la fonction draw()...

Je tourne en rond et je n'en vois plus le bout...
Quelqu'un a-t-il une solution ?

victorlevasseur

  • Full Member
  • ***
  • Messages: 206
    • Voir le profil
Re : Conteneur de sf::Drawable - fonction draw()
« Réponse #1 le: Juin 03, 2015, 11:33:42 pm »
Citer
std::vector<sf::Drawable*> puisque qu'il s'agit d'un conteneur.
Mauvais idée, il faut plutôt une variable membre qui est de type std::vector<sf::Drawable*>.

Zekko

  • Invité
Re : Conteneur de sf::Drawable - fonction draw()
« Réponse #2 le: Juin 04, 2015, 06:41:10 pm »
Citer
std::vector<sf::Drawable*> puisque qu'il s'agit d'un conteneur.
Mauvais idée, il faut plutôt une variable membre qui est de type std::vector<sf::Drawable*>.
Ah bon ? Pourtant ici l'héritage me semblait approprié, ainsi l'utilisateur de la classe aurait eu un contrôle plus fin sur le contenu avec les méthodes héritées des std::vector ... Et ma classe étant un conteneur, ça paraîtrait logique qu'on puisse effectuer les mêmes opérations que sur un conteneur classique, avec cependant les fonctionnalités de sf::Drawable et de sf::Transformable en plus.


De toute manière, d'une façon ou de l'autre, le problème reste inchangé : je n'ai pas accès aux bounds des sf::Drawables.

Zekko

  • Invité
Re : Conteneur de sf::Drawable - fonction draw()
« Réponse #3 le: Juin 06, 2015, 06:37:03 pm »
Je vois deux solutions à mon problème. Cependant, il faudrait pour cela modifier la SFML.


La première serait tout simplement d'inclure dans sf::Drawable une méthode pour avoir les bounds de l'objet. Par définition, un sf::Drawable peut être dessiné et possède donc des bounds accessible. Cela n'est cependant pas dans la vision SFML de la gestion de GUI.

Pour palier l'inélégance de la solution précédente, on pourrait créer une classe "interface" qui se contenterait d'hériter de sf::Drawable et de sf::Transformable. On aurait ainsi un conteneur de sf::DrawableTransformable dans lequel on aurait accès aux méthodes getGlobalBounds() etc. Il faudra alors se passer de sf::VertexArrays, ou alors les rendre transformables.


Je ne sais pas s'il existe des solutions à mon niveau d'utilisateur de la SFML, mais si vous en avez, n'hésitez pas à m'en faire part. Sinon, je n'ai plus qu'à espérer une évolution de la bibliothèque dans ce sens et me contenter en attendant d'un code non modulable...  :-\