Forum de la communauté SFML
Aide => Graphique => Discussion démarrée par: Varden le Janvier 13, 2014, 04:21:29 pm
-
Bien le bonjour/bonsoir.
J'aimerai me faire une classe qui puisse puisse représenté tout ce qui peut etre "dessiné", afin de pouvoir stocker dans un tableau ce que la boucle d'affichage doit dessiner dans la fenetre. je me suis dit que le mieux serai de stocker des sf::VertexArray, mais je ne voit aucune methode pour recuperé l'attribut "m_vertices" de sf::Text. et comme ce membre est private, je ne peut utiliser l'héritage.
Est-ce que je doit faire un copier coller de la classe sf::Text dans une classe personnalisé, puis modifier le "private" en protected? ou simplement rajouter une methode qui permette de récuperer une reference vers ce sf::VertexArray? ou bien encore dssiner le sf::Text dans une sf::RenderTexture pour au final stocker des textures? cette derniere version me semble lourde...
Voila, si vous avez des idées, des éclaircissements, etc;;;, je vous en serai reconnaissants.
Bonne journée a vous.
-
Bonsoir,
Pourquoi ne pas stocker un tableau de pointeurs sur des sf::Drawable tout simplement ?
C'est bien tout ce qui peut être dessiné comme son nom l'indique.
De plus on peut très bien concevoir des entités pouvant être dessinées sans pour autant qu'elle ne contienne de sf::VertexArray.
-
J'y ai penser, mais si je fait cela, je n'aurai acces qu'à la methode "draw()" de sfDrawable, et non pas de celle redéfinie par l'une de ses filles, donc aucun acces aux élément a dessiner, cela ne fera rien...ou alors je loupe quelque chose.
mon but serai de résumé tout ce que la sfml peut dessiner a un élément commun. et que ce soit des shape, sprite, ou Text, tous donnent des vertex a draw(). donc le plus simple ne serait-il pas de ne stocker que des vertexArray?
mais si je me trompe, je te pris de m'éclairer d'avantage.
-
Bonjour,
J'y ai penser, mais si je fait cela, je n'aurai acces qu'à la methode "draw()" de sfDrawable, et non pas de celle redéfinie par l'une de ses filles, donc aucun acces aux élément a dessiner, cela ne fera rien...ou alors je loupe quelque chose.
En effet, tu loupes que sf::Drawable::draw() est une méthode virtuelle :)
http://cpp.developpez.com/faq/cpp/?page=virtual#CLASS_fonction_vituelle
C'est donc bien la méthode définie dans sa classe fille (sf::Text::draw) qui sera appelée, même si le pointeur ne semble désigner qu'un sf::Drawable.
D'ailleurs le fait que sf::Drawable::draw() soit virtuelle pure (=0) interdit d'appeler cette méthode telle quelle.
Il n'y a donc pas grand chose à craindre.
-
Ok, je vais tester, dans ma tête, je pensai qu'il me faudrai créer des pointeurs de type fille pour pouvoir appeler la version fille de la methode virtuelle, et que créer des pointeurs de type parent n'appelerai que la version parent de la methode... et en plus elle est virtuelle pure.
sa simplifierai bien les choses en effet.
edit: je vient d'essayer, un simple "std::vector<sf::Drawable*>" et je lui ai ajouter via un push_back(), une classe personnalisé qui héritait de sf::Drawable, et j'ai appeler sf::RenderWindow.draw() en fournissant l'objet pointer, et sa passe crème.... j'y avait penser pourtant, mais j'était persuader que cela ne fonctionnerai pas. merci a vous deux.