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

Auteur Sujet: Un peu plus de Vector2  (Lu 3500 fois)

0 Membres et 1 Invité sur ce sujet

L01man

  • Jr. Member
  • **
  • Messages: 69
    • Voir le profil
Un peu plus de Vector2
« le: Mai 01, 2012, 09:42:55 pm »
Les Vector2 sont beaucoup utilisés pour les coordonnées, les vecteurs, etc. C'est un effort d'écriture, et d'autres auraient eu peur pour la performance, mais finalement c'est plus beau.
On trouve donc des Vector2 dans les attributs Position, Size, avec leurs accesseurs et mutateurs correspondants - j'ai vu que récemment GetWidth() et GetHeight()  avaient été remplacés par un getSize() dans Image dans SFML2 -, mais pas dans une seule classe : Rect ! Elle est définie avec left, top, width, height. Du coup, on perd l'avantage du tout-Vector2, et on doit faire setPosition(unRect.left, unRect.top) au lieu de setPosition(unRect.topLeft) par exemple. Pourquoi ne pas créer un rectangle à partir d'un point Position ou TopLeft et d'un autre Size ? RectangleShape le fait.
D'autre part, devrait-on systématiquement conserver deux fonctions de de type int, int pour l'une et Vector2 pour l'autre, comme on le voit dans setPosition, setScale, setOrigin, setCenter et move ? Je pense que ça encourage plutôt à utiliser des coordonnées séparées partout, et à ce moment-là on recommence à créer des Vector2 et à en extraire les coordonnées en permanence, ce qui allonge le code.  Laurent, tu disais :
Citer
toi tu voudrais du minimalisme (pourquoi faire ?) alors que moi je privilégie les noms explicites et qui s'auto-documentent.
« Modifié: Mai 02, 2012, 08:19:25 am par Laurent »
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.

Koryushin

  • Jr. Member
  • **
  • Messages: 93
    • Voir le profil
Re : Un peu plus de Vector2
« Réponse #1 le: Mai 01, 2012, 10:17:02 pm »
Rien de t’empêche de créer toi même ces 2 fonctions.
Je l'ai fais pour les sf::Vector2 et sf::Vector3 pour leur rajouter des fonctions mathématiques ( produit scalaire, vectoriel, norme et autres)

il suffit de créer un fichier .hpp et de l'appeler à la place de SFML/Graphics/Rect.hpp
#include <SFML/Graphics/Rect.hpp>

template <class T>     
sf::Vector2<T> GetPosition(const sf::Rect<T>& rect)
{
   return sf::Vector2<T>(rect.left, rect.top);
}

template <class T>     
sf::Vector2<T> GetSize(const sf::Rect<T>& rect)
{
   return sf::Vector2<T>(rect.width, rect.height);
}
 

après il suffit d'appeler un:
- SetPosition(GetPosition(unrect));
ou
- SetSize(GetSize(unrect));

Biensur c'est qu'un exemple de ce qui est possible, mais ça gène pas trop vu que les attributs de Rect sont publics. Comme y a les 2 implémentations avec Vector2 et avec (x, y) ca me dérange pas plus que ça.
« Modifié: Mai 01, 2012, 10:18:56 pm par Koryushin »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : Un peu plus de Vector2
« Réponse #2 le: Mai 01, 2012, 10:57:46 pm »
Pour l'instant je ne vois pas d'argument contre, mais je ne pense pas m'y intéresser pour SFML 2. Donc si je décide de le faire, il faudra que ce soit de manière compatible avec l'API actuelle, sinon ça attendra SFML 3.
Laurent Gomila - SFML developer

L01man

  • Jr. Member
  • **
  • Messages: 69
    • Voir le profil
Re : Un peu plus de Vector2
« Réponse #3 le: Mai 01, 2012, 11:00:37 pm »
Je vais utiliser ton code, Koryushin :).
Yeah, une de mes propositions a été acceptée. Qu'en est-il de ma proposition d'enlever les méthodes de type set(x, y) au profit des set(vector) ?
« Modifié: Mai 01, 2012, 11:02:41 pm par L01man »
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: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : Un peu plus de Vector2
« Réponse #4 le: Mai 01, 2012, 11:13:34 pm »
J'ai pas refusé, mais j'ai pas dit que j'allais le faire ;D

Retirer les fonctions(x, y), dans le principe j'aime assez, et j'ai même déjà essayé, mais je me fais immédiatement taper dessus. J'imagine que ça passera mieux dans quelques années, quand tous les compilos seront compatibles C++11 et que les gens n'auront plus besoin d'écrire sf::Vector2f(x, y) mais juste {x, y}.
Laurent Gomila - SFML developer

L01man

  • Jr. Member
  • **
  • Messages: 69
    • Voir le profil
Re : Un peu plus de Vector2
« Réponse #5 le: Mai 01, 2012, 11:54:21 pm »
C'est vrai que les sucres syntaxiques manquent beaucoup au C++. C'est l'une des grandes raisons pour lesquelles je suis souvent tenté d'aller du côté des langages "de scripts" ou fonctionnels plus souvent.
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: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : Un peu plus de Vector2
« Réponse #6 le: Mai 02, 2012, 08:20:59 am »
J'ai retiré [Accepté] du titre, pour deux raisons :
- personne ne met jamais ce tag
- c'est pas accepté, j'ai juste dit que je ne voyais rien contre ; même si c'était accepté ça ne se ferait pas avant plusieurs mois/années, alors...
Laurent Gomila - SFML developer

L01man

  • Jr. Member
  • **
  • Messages: 69
    • Voir le profil
Re : Un peu plus de Vector2
« Réponse #7 le: Mai 02, 2012, 10:40:11 am »
OK, j'aurai tout mon temps pour éditer le titre.
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.