OK, j'ai compris pour Image et Texture.
Par contre, je ne comprends pas pour la partie sur le "remontage". En fait, j'ai l'impression que mettre setColor uniquement dans Sprite et Text et les flip et setSmooth uniquement dans Sprite, c'est limiter leur utilisation. Pourquoi tous les Drawable ne pourraient pas être retournés, teintés, etc. ? Théoriquement, ça me semble juste et techniquement, j'imagine que c'est exécuté par OpenGL et qu'avec un peu de chance ça peut se faire pour tous les Drawable de la même manière. Je pars du principe que, lorsque je vois deux fois la même méthode dans deux classes qui héritent du même parent, et que cette méthode n'est pas définie chez le parent, alors elle devrait l'être. Ensuite, setSmooth, flip, etc. sont des transformations qui ne sont pas spécifiques à Sprite, de même que Draw n'est pas spécifique à Sprite. Disons que chaque enfant de Drawable permet de faire un dessin spécial, mais que tous doivent pouvoir être transformés de la même manière. Par exemple, ils peuvent tous utiliser setScale(), setRotation(), alors pourquoi pas flip() ?
Je ne comprends pas le problème d'ajouter des fonctions virtuelles pures. Drawable en possède déjà une, donc ça ne change rien pour elle. Normalement, l'utilisateur n'a pas besoin d'hériter Drawable, donc ça ne gène toujours pas. En plus, j'imagine, mais je me trompe peut-être lourdement, que la nouvelle classe Drawable pourrait ressembler à ça (je n'écris que les ajouts et les changements) :
class Drawable {
public:
Drawable(), my_isSmooth(false), /* etc. */ {
}
void setColor(sf::Color NewColor) {
my_Color = NewColor
}
//etc. que des mutateurs et des accesseurs de base en fait
//une nouvelle fonction Draw pour utiliser tous les paramètres
void Draw() {
if(my_isSmooth) {
//fonction openGL pour activer le smooth
}
//fonction openGL pour passer un filtre de la couleur sur ce qui va etre dessine
MainDraw();
}
//cest la fonction qui est redefinie dans les classes filles. comme ca pas besoin pour elles de toucher aux my_isColor, etc.
void MainDraw() = 0;
private:
sf::Color my_Color;
bool my_isSmooth;
bool my_isFlipHorizontally, my_isFlipVertically;
}
En quoi ajouter plus de fonctions, à usage facultatif forcerait l'utilisateur à changer de concept ? En effet, remonter ces classes ne demanderaient même aucun changement de code du côté utilisateur, mais il pourrait faire plus de choses.