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

Auteur Sujet: Déshériter Sprite et ses soeurs de Transformable  (Lu 10855 fois)

0 Membres et 1 Invité sur ce sujet

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Déshériter Sprite et ses soeurs de Transformable
« Réponse #15 le: Mai 17, 2012, 10:20:41 am »
Je pense que la première réponse que j'ai donnée dans cette discussion est toujours d'actualité.

En ce qui concerne l'éventuelle application de changements, j'ai aussi répondu plusieurs fois : pas avant SFML 3 de toute façon, donc autant dire qu'on est dans du très abstrait là.
Laurent Gomila - SFML developer

L01man

  • Jr. Member
  • **
  • Messages: 69
    • Voir le profil
Re : Déshériter Sprite et ses soeurs de Transformable
« Réponse #16 le: Mai 17, 2012, 04:22:12 pm »
Oui, mais même si ces changements sont effectués dans  ans ils pourraient ne nécessiter que 5 minutes de code.
Citation de: Laurent
On peut déjà séparer sans problème avec l'API actuelle (tu peux ignorer la transformation du sprite et lui en passer une perso lors du draw)
: j'ai répondu en quoi c'était dangereux et ça favorisait ce que tu cherches à absolument éviter dans la première partie de mon avant-dernier message.
Citer
mais j'ai quand même voulu garder la simplicité des classes actuelles (reprises de 1.6)
Dans un vrai projet, un bon design, séparant Transformable et Drawable, simplifiera plus le code qu'un design où ce n'est pas le cas car on évite les opérations inutiles comme "tu peux ignorer la transformation du sprite et lui en passer une perso lors du draw".
Citation de: Laurent
car la plupart des gens les utilisent comme ça.
Citation de: Laurent
C'est une mauvaise chose car ça oriente très fortement les gens vers une direction qui n'est pas forcément la bonne. En mettant des classes très haut-niveau, "finales", dans SFML, j'incite les gens à faire pareil pour leurs propres classes, et donc utiliser les mêmes classes de base. Mais les classes des gens ne sont pas celles de SFML, et on voit très vite arriver plein de gens sur le forum qui se plaignent de limitations ou autres.
Citer
Et je ne veux pas que les gens utilisent des collections hétérogènes de Drawable. Je veux qu'ils utilisent des collections hétérogènes de leurs propres classes, avec des sprites, textes, etc. comme attributs de certaines.
N'est-ce pas la solution ultime qui n'apporte que du plus ?
Citation de: Laurent
toi tu voudrais du minimalisme (pourquoi faire ?) [...]
La "simplicité" n'est qu'illusoire et n'est qu'un chemin vers le côté obscur qui attend tous les débutants à bras ouverts.
Mettre sf::Transformable et sf::Drawable dans sf::Sprite et les autres, c'est comme mettre sf::Texture directement dans sf::Sprite.
http://metroidprime4.xooit.fr/

Un même visage, un même passé, deux destins différents ?
Metroid Prime : Némésis, fangame de la suite du célèbre Metroid Prime 3 : Corruption.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Déshériter Sprite et ses soeurs de Transformable
« Réponse #17 le: Mai 17, 2012, 04:35:35 pm »
Je suis d'accord mais malheureusement on ne vit pas dans ce monde où tout est carré et bien séparé. Il y a des gens qui ne font pas des gros programmes bien structurés et qui veulent garder le niveau de simplicité initial, je ne peux pas aller contre ça.

Maintenant avec SFML 2 on peut faire simple ou bien carré, les gens n'ont qu'à choisir ce qu'ils veulent, moi ça me va.
Laurent Gomila - SFML developer

L01man

  • Jr. Member
  • **
  • Messages: 69
    • Voir le profil
Re : Déshériter Sprite et ses soeurs de Transformable
« Réponse #18 le: Mai 18, 2012, 07:09:04 pm »
Ca ne te gène plus que la plupart (sûrement) des utilisateurs débutants tombent dans des pièges de structure qui, en plus, finissent par les bloquer ? Avant, tu tenais absolument à soutenir le contraire, il me semble.
Citation de: Laurent
Maintenant avec SFML 2 on peut faire simple ou bien carré, les gens n'ont qu'à choisir ce qu'ils veulent, moi ça me va.
Mais les gens ne choisissent pas vraiment, ils sont "naturellement" attirés vers le mauvais choix à cause de cet héritage multiple ! Le casser permettrait toujours de recréer le vice avec une classe héritant de sf::Sprite et sf::Transformable, par exemple, mais on serait plus conscient que c'est un mauvais choix et le choix naturel serait le bon. La SFML est très souvent utilisée comme base pour un design, alors il faut enlever les erreurs de ce genre quand elles sont détectées. On ne peut pas laisser un utilisateur construire une structure qui tombera inexorablement, c'est trop bête et trop frustrant !
Citation de: Laurent
Je suis d'accord mais malheureusement on ne vit pas dans ce monde où tout est carré et bien séparé
En programmation, c'est possible. En tout cas, il y a peut-être une limite mais on ne l'atteint pas en séparant le visuel de la logique, qui est un principe fondamental.
Citer
et qui veulent garder le niveau de simplicité initial
Justement, ça devient de plus en plus compliqué parce-qu'on a voulu trop réunir au départ ! C'est aller à l'encontre des classes.

Regardons ce que ça change concrètement.
sf::Texture Tex("machin.png");
sf::Sprite Spr(Tex);

Spr.SetPosition(50, 50);
Spr.Rotate(45);

sf::RenderWindow Win(...);
Win.Draw(Spr);
il suffira d'ajouter deux lignes de code, juste après la déclaration du sprite :
sf::Transformable Transf;
Spr.attachTo(Transf);
et de remplacer les "Spr.machin" par des "Transf.machin".

Et on se débarrassera surtout de l'abominable :
class Player : public sf::Sprite {
  public:
    Player() {
    }
     void update() {
       SetPosition(50, 50);
       SetRotation(45);
     }
}
ou d'un
//meilleur design mais lourd à mettre en place donc peu utilisé. Comme il a l'air mal formé, l'utilisateur va penser qu'il se trompe et va choisir la pire solution possible alors qu'il avait raison, mais la SFML l'a induit en erreur !!
class Player : public sf::Transformable {
  public:
    Player() :
      Graphics(new sf::Sprite()) {
    }
    ~Player() {
      delete Graphics;
    }
     void update() {
       SetPosition(50, 50);
       SetRotation(45);

       //et c'est parti mesdames et messieurs
       Graphics->SetPosition(GetPosition());
       Graphics->SetRotation(45);
     }

  private:
    sf::Drawable* Graphics;
}
au profit de
//on est plus tenté d'hériter Sprite grâce à sa séparation de Transformable et à sa fonction attachTo qui indique qu'il serait bizarre de faire "attachTo(*this);" et on est orienté vers le deuxième design mais de façon moins lourde en lignes de code et en mémoire consommée inutilement.
class Player : public sf::Transformable {
  public:
    Player() :
      Graphics(new sf::Sprite()) {
      Graphics->attachTo(*this);
    }
    ~Player() {
      delete Graphics;
    }
     void update() {
       SetPosition(50, 50);
       SetRotation(45);
       /*on peut même à tout moment changer de Graphics:
         delete Graphics;
         Graphics = new sf::RectangleShape(10, 10); */
     }

  private:
    sf::Drawable* Graphics;
}
http://metroidprime4.xooit.fr/

Un même visage, un même passé, deux destins différents ?
Metroid Prime : Némésis, fangame de la suite du célèbre Metroid Prime 3 : Corruption.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Déshériter Sprite et ses soeurs de Transformable
« Réponse #19 le: Mai 18, 2012, 08:20:03 pm »
Le problème, avec un attachTo, c'est qu'on aura deux objets liés l'un à l'autre mais dont la durée de vie est gérée par l'utilisateur. Avec les problèmes que l'on connaît pour Sprite/Texture, Font/Text, etc. Si ce n'est pas extrêmement nécessaire, je préfère éviter ce genre de design.

Ensuite, faute d'avoir un design parfaitement carré, on a de la bonne doc, de bons tutoriels, et du bon support sur le forum. C'est déjà pas mal.

Ensuite, il y a beaucoup plus d'utilisateurs qui préfèrent la simplicité des classes actuelles, que d'utilisateurs qui construisent un truc complexe et utilisent les classes comme tu le décris. Gérer une bibliothèque avec beaucoup d'utilisateurs, c'est aussi savoir faire des compromis. Surtout quand on a un "S" dans le nom.

Et enfin, étant donné que ça ne se ferait pas avant SFML 3, pourquoi ne pas attendre d'avoir du recul sur la façon dont SFML 2 est utilisée ? Elle n'est pas encore sortie, ça me paraît un peu tôt pour refaire le monde.
Laurent Gomila - SFML developer

L01man

  • Jr. Member
  • **
  • Messages: 69
    • Voir le profil
Re : Déshériter Sprite et ses soeurs de Transformable
« Réponse #20 le: Mai 19, 2012, 12:04:36 pm »
Oui, quand les allocations dynamiques pointent leur nez, c'est pas génial.
Citer
de bons tutoriels
Pourrait-on mettre l'accent sur le piège qu'on veut éviter de façon à ce que l'utilisateur ne tombe pas dedans dans les tutoriels sur les graphismes ?
Citer
Gérer une bibliothèque avec beaucoup d'utilisateurs, c'est aussi savoir faire des compromis
En voilà un (pour SFML3) : on sépare effectivement Sprite et ses sœurs de sf::Transformable, mais on crée une troisième hiérarchie de classes qui héritent Sprite et Transformable, etc. pour qu'on puisse parvenir à un bon design sans "mauvaises manipulations" et que la simplicité soit toujours au rendez-vous ? Quand aux nouveaux noms, pour les classes qui héritent Sprite et les autres avec Transformable, je propose : FullSprite, StandaloneSprite ou quelque-chose d'autre dans le genre. A moins qu'on ne fasse l'inverse et que les Sprite qui ne viennent que de Drawable soient nommés SimpleSprite, BaseSprite, HalfSprite, ou autre afin que les codes de SFML2 fonctionnent toujours.

Quant à l'utilisation de SFML2, je ne suis pas sûr que les utilisateurs remarquent la nouvelle Transformable et qu'en plus ils aient l'idée de bousculer leur design actuel pour l'hériter, en sachant que Sprite et les autres le font déjà. Si tu veux, on peut arrêter d'en parler temporairement ^^.
http://metroidprime4.xooit.fr/

Un même visage, un même passé, deux destins différents ?
Metroid Prime : Némésis, fangame de la suite du célèbre Metroid Prime 3 : Corruption.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Déshériter Sprite et ses soeurs de Transformable
« Réponse #21 le: Mai 19, 2012, 04:06:33 pm »
Je pense qu'on peut en effet arrêter d'en parler pour le moment. Je vais expliquer tout ça dans les tutoriels, et j'observerai ensuite la façon dont les gens utilisent les nouvelles classes. Et puis là j'en tirerai les leçons qu'il y a à tirer.
Laurent Gomila - SFML developer

L01man

  • Jr. Member
  • **
  • Messages: 69
    • Voir le profil
Re : Déshériter Sprite et ses soeurs de Transformable
« Réponse #22 le: Mai 19, 2012, 08:07:49 pm »
D'accord. Que penses-tu de faire un sondage demandant : votre code ressemble-t-il plus à ça : class Player/Tile/Missile : sf::Sprite { ... };, à ça : class Player/Tile/Missile {
  public:
    int x, y;

    void update() {
      Graphics.SetPosition(x, y);
    }

   private:
     sf::Sprite Graphics;
};
ou à ça : class Player/Tile/Missile : sf::Transformable {
  private:
    sf::Sprite Graphics;
};
? Tu appelles ça "Sondage anonyme pour l'amélioration de la SFML" et tu obtiens n * 1000000 de votes, où n est le nombre de jours depuis la publication du sondage. La fonction est simple ;).
D'ailleurs,  comment t'y prends-tu actuellement pour voir la façon dont les gens se débrouillent ? Tu le fais à partir des demandes d'aides ?
http://metroidprime4.xooit.fr/

Un même visage, un même passé, deux destins différents ?
Metroid Prime : Némésis, fangame de la suite du célèbre Metroid Prime 3 : Corruption.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Déshériter Sprite et ses soeurs de Transformable
« Réponse #23 le: Mai 19, 2012, 08:24:13 pm »
On ne va pas faire de sondage maintenant, ce serait idiot.

Et pas besoin de sondage d'ailleurs, puisque quand les gens ont un souci ou une question ils viennent en parler ici :P

Et lorsque les gens n'ont pas de problème alors je n'en ai pas non plus.
Laurent Gomila - SFML developer

L01man

  • Jr. Member
  • **
  • Messages: 69
    • Voir le profil
Re : Déshériter Sprite et ses soeurs de Transformable
« Réponse #24 le: Mai 20, 2012, 02:13:07 pm »
Oui, pas maintenant.
Mais je ne pense pas que tous viennent partager leurs problèmes : je ne l'ai jamais fait, par exemple, mais ces sujets m'ont au passage fait avancé.
Le sondage n'est pas du type "avez-vous un problème ?", mais plutôt "Quelle structure utilisez-vous en ce moment ?". La pire des structures proposées peut fonctionner à un certain niveau et l'utilisateur en question peut ne pas la changer et ne pas demander de l'aide ici.
Les sondages sont simples à mettre en place et ont beaucoup plus de participation qu'un forum. Ils vont très bien de paire avec les forums.
http://metroidprime4.xooit.fr/

Un même visage, un même passé, deux destins différents ?
Metroid Prime : Némésis, fangame de la suite du célèbre Metroid Prime 3 : Corruption.