IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SFML Discussion :

[SFML/c++14] Bug de positionnement ?


Sujet :

SFML

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    mai 2014
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mai 2014
    Messages : 227
    Points : 162
    Points
    162
    Par défaut [SFML/c++14] Bug de positionnement ?
    Bonjour à tous ! je code actuellement un petit jeu type rpg. Je l'ai fini mais j'ai voulu ajouter une barre de vie qui apparaît sous les monstres. Sauf que ma barre n'est pas bien centré et je ne vois pas pourquoi ^^" voici un code minimaliste pour faire fonctionner la barre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
     
    #include <iostream>
    #include <vector>
    #include <SFML/Graphics.hpp>
    #include <windows.h>
     
    using std::string;
    using std::cout;
    using std::endl;
    using std::vector;
     
    sf::Vector2f operator-( sf::Vector2f v_f, float const &i ){ v_f.x -= i;v_f.y -= i;return v_f;}
    sf::Vector2f operator/( sf::Vector2f v_f, float const &i ){ v_f.x /= i;v_f.y /= i;return v_f;}
    sf::Vector2f operator+( sf::Vector2f v_f, float const &i ){ v_f.x += i;v_f.y += i;return v_f;}
     
    class LifeBar : public sf::Drawable, public sf::Transformable
    {
    public:
        LifeBar( sf::Vector2f position, sf::Vector2f size, float life ) : _max_status_size{ size.y - 2.0f }, _max_life{life}, _life{life}
        {
            _rect.setSize(size);
            _rect.setFillColor( sf::Color( 0, 0, 0, 0 ) );
            _rect.setOutlineThickness(1);
            _rect.setOutlineColor(sf::Color::Black);
            _rect.setPosition(position);
     
            _status.setSize( size - 2.0f );
            _status.setFillColor( sf::Color( 0, 255, 0, 200 ) );
            _status.setPosition( position + 1 );
        }
     
        void lifeDamage( float const damage )
        {
            if( damage < _life )
                _life -= damage;
            else
                _life = 0;
            if( _life > _max_life )
                _life = _max_life;
            _status.setSize( sf::Vector2f( _status.getSize().x, _life * _max_status_size / _max_life ) );
            _status.setFillColor( sf::Color( (_life * 255 / _max_life ) * -1, _life * 255 / _max_life, 0, 200 ) );
        }
     
        sf::Vector2f getSize() const
        {
            return _rect.getSize();
        }
     
    private:
     
        float const _max_status_size;
        sf::RectangleShape _rect;
        sf::RectangleShape _status;
        float const _max_life;
        float _life;
        virtual void draw( sf::RenderTarget& target, sf::RenderStates states ) const
        {
            states.transform *= getTransform();
            target.draw( _rect, states );
            target.draw( _status, states );
        }
    };
     
    int main(void)
    {
        bool inApp{true};
        unsigned int countOfClick{0};
        sf::RenderWindow window;
        sf::ContextSettings conSettings;
        conSettings.antialiasingLevel = 4;
        window.create( sf::VideoMode( 800, 600 ), "Test", sf::Style::Default, conSettings );
     
        LifeBar lb( sf::Vector2f(50,50), sf::Vector2f(50,500), 100 );
        lb.setOrigin( lb.getSize() / 2);
        lb.rotate(270);
        lb.setPosition(sf::Vector2f( static_cast<float>( window.getSize().x / 2 ), static_cast<float>( window.getSize().y / 2 ) ) );
        sf::Clock clk;
        while( inApp )
        {
            while( window.isOpen() )
            {
                sf::Event event;
                while( window.pollEvent( event ) )
                {
                    if( event.type == event.Closed )
                        window.close();
                    if( event.type == event.MouseButtonPressed )
                    {
                        if( sf::Mouse::isButtonPressed( sf::Mouse::Left ) )
                        {
                            system("cls");
                            cout << "Nombre de cliques : " << countOfClick++;
                        }
                    }
                }
                window.clear(sf::Color::White);
                window.draw(lb);
                window.display();
                while( clk.getElapsedTime().asMicroseconds() < 1000 )
                {
     
                }
                clk.restart();
                lb.lifeDamage(0.01);
            }
        }
    }
    Merci de bien vouloir m'aider

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    juin 2010
    Messages
    6 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : juin 2010
    Messages : 6 859
    Points : 31 474
    Points
    31 474
    Billets dans le blog
    4
    Par défaut
    Salut,

    Que signifie "pas bien centrée" ? Un petit screenshot peut-être ?
    Vu que tu joues avec les origines, mais pas de partout, ça devient vite brouillon à te suivre. Et hériter de sf:rawable et Transform, héritage déjà présent avec Sprite, c'est pas vraiment une bonne chose là. Ta lifebar est une composition de ce qu'elle dessine, elle n'a pas à être Drawable ou Transformable. Même si je comprends la syntaxe, parce que tu vas plus vite ainsi, le concept n'est pas bon.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    mai 2014
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mai 2014
    Messages : 227
    Points : 162
    Points
    162
    Par défaut
    Citation Envoyé par Bousk Voir le message
    Salut,

    Que signifie "pas bien centrée" ? Un petit screenshot peut-être ?
    Vu que tu joues avec les origines, mais pas de partout, ça devient vite brouillon à te suivre.
    Boh arréte ya juste 1 seul ligne pour l'origin x) et c'est celci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lb.setOrigin( lb.getSize() / 2);
    Et pour le screenshot ça donne ceci :
    Nom : erreur.png
Affichages : 184
Taille : 154,7 Ko
    Franchement j'ai beau tourner le code dans tout les sens, je vois pas :/ ?

    Ps: Pour la conception là c'est un brouillon hein, si je suis déjà bloquer pour un centrage c'est mal barré X)

  4. #4
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    juin 2007
    Messages
    5 154
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : juin 2007
    Messages : 5 154
    Points : 16 971
    Points
    16 971
    Par défaut
    As-tu tenu compte des origines et taille, de la bar comme du sprite représentant l'ennemi?
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  5. #5
    Membre habitué
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    mai 2014
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mai 2014
    Messages : 227
    Points : 162
    Points
    162
    Par défaut
    Citation Envoyé par leternel Voir le message
    As-tu tenu compte des origines et taille, de la bar comme du sprite représentant l'ennemi?
    J'avoue ne pas avoir vraiment compris ta question, mais pour l'instant faisons simple je veux juste que ma barre de vie soit centré dans ma fenêtre. Je n'ai pas de problèmes pour le reste c'est juste cette barre qui me pose problème car il y un décalage vers la droite ce qui est... absurde ? Je pense que rotate est peut être le problème mais normalement il prend en compte l’origine donc c'est pour ça que je suis bloquer ^^"

  6. #6
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    juin 2007
    Messages
    5 154
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : juin 2007
    Messages : 5 154
    Points : 16 971
    Points
    16 971
    Par défaut
    Il est possible de ne pas hériter de Transformable, et de faire manuellement l'équivalent.
    L'intérêt, c'est que l'origine des transformation dans Transformable est commune, donc une rotation par rapport à son centre signifie que l'origine n'est pas dans l'angle, mais au centre.

    Comment est fait ton affichage précisément? Quelles sont les transformations appliquées à ta barre? et où est son origine?
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  7. #7
    Membre habitué
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    mai 2014
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mai 2014
    Messages : 227
    Points : 162
    Points
    162
    Par défaut
    Citation Envoyé par leternel Voir le message
    Il est possible de ne pas hériter de Transformable, et de faire manuellement l'équivalent.
    L'intérêt, c'est que l'origine des transformation dans Transformable est commune, donc une rotation par rapport à son centre signifie que l'origine n'est pas dans l'angle, mais au centre.

    Comment est fait ton affichage précisément? Quelles sont les transformations appliquées à ta barre? et où est son origine?
    Euh... Donc où est le problème du coup ? ^^"
    Affichage ->
    Transformation ->
    Origine ->
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lb.setOrigin( lb.getSize() / 2);

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    juin 2010
    Messages
    6 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : juin 2010
    Messages : 6 859
    Points : 31 474
    Points
    31 474
    Billets dans le blog
    4
    Par défaut
    Y'a une ligne pour mettre l'origine sur la classe, pas sur les barres.
    Tu crées ton LifeBar à 50,50, centré sur l'écran, mais t'en sais rien puisqu'il n'affiche rien et n'est qu'un container, et dedans tu as un _rect que tu remets à 50,50... sauf qu'il est dans LifeBar et se retrouve donc à 100,100 par rapport à l'écran puisque les transformations sont multipliées. Et à vue de nez, c'est exactement ce qu'on voit sur ton screenshot.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  9. #9
    Membre habitué
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    mai 2014
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mai 2014
    Messages : 227
    Points : 162
    Points
    162
    Par défaut
    Citation Envoyé par Bousk Voir le message
    Y'a une ligne pour mettre l'origine sur la classe, pas sur les barres.
    Tu crées ton LifeBar à 50,50, centré sur l'écran, mais t'en sais rien puisqu'il n'affiche rien et n'est qu'un container, et dedans tu as un _rect que tu remets à 50,50... sauf qu'il est dans LifeBar et se retrouve donc à 100,100 par rapport à l'écran puisque les transformations sont multipliées. Et à vue de nez, c'est exactement ce qu'on voit sur ton screenshot.
    Merci ! je vais modifié un peu mon code et je vous le remontre plus tard

    Edit :
    Je n'arrive pas à mettre deux texture sur mon sprite ^^" je ne sais pas comment faire et la doc ne m'aide pas trop :/
    J'ai essayer ça mais ça ne fait aucun effet, je crois que je n'ai pas compris comment faire x)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void origin()
    {
        _rect.setOrigin( _rect.getSize() / 2 );
        _status.setOrigin( _status.getSize() / 2 );
    }

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    juin 2010
    Messages
    6 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : juin 2010
    Messages : 6 859
    Points : 31 474
    Points
    31 474
    Billets dans le blog
    4
    Par défaut
    Un sprite ça a une texture.
    Quel est le rapport entre le problème de texture et une fonction origin qui centre l'origine de chaque élément ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  11. #11
    Membre habitué
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    mai 2014
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mai 2014
    Messages : 227
    Points : 162
    Points
    162
    Par défaut
    Citation Envoyé par Bousk Voir le message
    Un sprite ça a une texture.
    Quel est le rapport entre le problème de texture et une fonction origin qui centre l'origine de chaque élément ?
    Le problème d'origine est réglé j'ai juste a mettre la pos a 0 0. Maintenant je veux optimiser mon code ^^

  12. #12
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    juin 2007
    Messages
    5 154
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : juin 2007
    Messages : 5 154
    Points : 16 971
    Points
    16 971
    Par défaut
    Une chaîne est aussi faible que son maillon le plus fragile.
    De même, un programme est aussi peu performant que sa plus mauvaise partie.
    C'est celle-là qu'il faut optimiser. Et pour savoir de laquelle il s'agit, il n'y a qu'une seule solution: mesurer.

    Ce qui se fait avec un outil de profilling.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  13. #13
    Membre habitué
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    mai 2014
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mai 2014
    Messages : 227
    Points : 162
    Points
    162
    Par défaut
    Euh là tu ma perdu ^^" J'ai compris qu'il faut mesurer les pertes de performances... mais j'utilise quoi ? ( sous tdm-gcc codeblock )
    Et là on m'as dit d'utiliser un sprite au lieu de dessiner deux choses... mais es que ça a réellement un intérêt vu que mon sprite vas tout le temps être modifié ?

  14. #14
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    juin 2010
    Messages
    6 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : juin 2010
    Messages : 6 859
    Points : 31 474
    Points
    31 474
    Billets dans le blog
    4
    Par défaut
    Tu ne peux de toutes façons pas dessiner 1 sprite puisque tu as 2 éléments.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  15. #15
    Membre émérite Avatar de Cirrus Minor
    Homme Profil pro
    Développeur .NET
    Inscrit en
    mars 2014
    Messages
    946
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : mars 2014
    Messages : 946
    Points : 2 495
    Points
    2 495
    Par défaut
    Citation Envoyé par Disixlis Voir le message
    Et là on m'as dit d'utiliser un sprite au lieu de dessiner deux choses...
    Ce que tu peux faire, c'est créer une classe "monstre" - ou même une classe plus générique si les personnages ont un rendu similaire - qui dessine ce qu'il faut dans sa méthode de rendu (le ou les sprites du monstre, la barre de vie, éventuellement l'ombre, des effets, etc...).

  16. #16
    Membre habitué
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    mai 2014
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mai 2014
    Messages : 227
    Points : 162
    Points
    162
    Par défaut
    Citation Envoyé par Cirrus Minor Voir le message
    Ce que tu peux faire, c'est créer une classe "monstre" - ou même une classe plus générique si les personnages ont un rendu similaire - qui dessine ce qu'il faut dans sa méthode de rendu (le ou les sprites du monstre, la barre de vie, éventuellement l'ombre, des effets, etc...).
    Mais les "monstre" etc tout ça c'est déjà réalisé, la c'est juste la barre de vie qui m'intéresse...
    Ps : j'ai déjà fini le jeu mais je voulais une barre de vie au lieu d'un nombre au dessus d'eux

  17. #17
    Membre émérite Avatar de Cirrus Minor
    Homme Profil pro
    Développeur .NET
    Inscrit en
    mars 2014
    Messages
    946
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : mars 2014
    Messages : 946
    Points : 2 495
    Points
    2 495
    Par défaut
    Dans ce cas, je comprends pas trop le problème...

    Tu affichais des chiffres auparavant, donc un objet graphique de type sf::Text je suppose.
    Maintenant, tu affiches un objet graphique de type LifeBar à la place.

  18. #18
    Membre habitué
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    mai 2014
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mai 2014
    Messages : 227
    Points : 162
    Points
    162
    Par défaut
    Citation Envoyé par Cirrus Minor Voir le message
    Dans ce cas, je comprends pas trop le problème...

    Tu affichais des chiffres auparavant, donc un objet graphique de type sf::Text je suppose.
    Maintenant, tu affiches un objet graphique de type LifeBar à la place.
    Donc mon code est correct non ?

Discussions similaires

  1. Vidéo flash bug firefox 3.0 (positionnement)
    Par doncho23 dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 13/02/2012, 09h32
  2. Bug de positionnement ie6
    Par leejunfan dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 28/04/2008, 17h44
  3. Bug positionnement dans menu "accordéon" multiniveau
    Par BnA dans le forum ActionScript 1 & ActionScript 2
    Réponses: 0
    Dernier message: 07/04/2008, 16h48
  4. [SFML] Ma fonction d'affichage bug
    Par bachir006 dans le forum SFML
    Réponses: 10
    Dernier message: 26/03/2008, 23h19
  5. Bug Firefox positionnement "dans le flux normal"
    Par thierryyyyyyy dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 29/04/2007, 13h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo