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

Auteur Sujet: Problème avec getGlobaBound  (Lu 1683 fois)

0 Membres et 2 Invités sur ce sujet

Erutan

  • Newbie
  • *
  • Messages: 2
    • Voir le profil
    • E-mail
Problème avec getGlobaBound
« le: Juin 03, 2014, 06:42:23 pm »
Bonjour,

Je fais mes premiers pas avec la sgml. J'ai un problème avec la fonction getGlobalBounds que j'utilise avec une entité que j'ai créée moi-même :
Voici le constructeur de cette entité (c'est juste un camembert avec une part en moins):

ImageHeros::ImageHeros(int nombreDePoint)
{
   

    m_vertices.setPrimitiveType(sf::TrianglesFan);
    m_vertices.resize(nombreDePoint+1);
   
    m_vertices[0].position = sf::Vector2f(0, 0);
    int pointCourant = 0;
   
    for (float i = 0; i<1.80*M_PI; i+= 1.80*M_PI/nombreDePoint)
    {
        pointCourant++;
        m_vertices[pointCourant].position = sf::Vector2f(50*cosf(i-4*1.80*M_PI/nombreDePoint),50* sinf(i-4*1.80*M_PI/nombreDePoint));
        m_vertices[pointCourant].color = sf::Color::Red;
       
    }
   
   
}
 

et la définition de la classe (qui est presque juste un copier collé du tuto)

class ImageHeros : public sf::Sprite
{
public:
   

    /**
     *   @brief
     */

    ImageHeros(int nombreDePoint);
   
private:
   
    virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const
    {
        // on applique la transformation de l'entité -- on la combine avec celle qui a été passée par l'appelant
        states.transform *= getTransform(); // getTransform() est définie par sf::Transformable
       
        // on applique la texture
        states.texture = &m_texture;
       
        // on peut aussi surcharger states.shader ou states.blendMode si nécessaire
       
        // on dessine le tableau de vertex
        target.draw(m_vertices, states);
    }
   
    sf::VertexArray m_vertices;
    sf::Texture m_texture;
};
 

Mon problème est que la boîte retournée par getGlobalBounds a sa longueur et sa largeur nulle...
A moins que je n'ai pas compris, cette boîte doit être calculée automatiquement, ce n'est pas à nous de l'indiquer ? En l'état actuel je ne peux pas faire de test de collision avec cette entité :S


J'ai également un autre problème : je voudrais que cette entité se tourne vers la souris, j'utilise une matrice 3x3 avec une classe Transform pour faire tourner l'image, il n'y a pas de problème dessus ça fonctionne voici mon code qui est dans la boucle principale (pour afficher l'image du héros):



 /*Cos et Sin de l'angle entre (0,1) et la direction du héros */
        float cosAngle = -(*heros).getDirectionY();
        float sinAngle = (*heros).getDirectionX();
       
        sf::Transform t3(cosAngle, -sinAngle, (*heros).getPositionX(),
                                 sinAngle, cosAngle,  (*heros).getPositionY(),
                                     0,            0,                       1 );
               
        // Clear screen
        window.clear();
       
        // Dessine l'image du héros
        window.draw(*(*jeu).getHeros()->getImage(), t3);
 

L'ennui que j'ai ici c'est que window.draw n'applique pas la transformation à l'entité mais juste à son affichage et je souhaite appliquer la matrice t3 directement à cette entité sans passer par une rotation (car il faudrait calculer l'angle et je trouve ça plus simple comme ça). Mais je n'ai pas trouvé de fonction qui le permette.

G.

  • Hero Member
  • *****
  • Messages: 1593
    • Voir le profil
Re : Problème avec getGlobaBound
« Réponse #1 le: Juin 03, 2014, 07:20:42 pm »
T'hérites de sprite, mais en vrai tu utilises un vertexArray.
Quand tu fais getGlobalBounds, tu récupères la boite englobante du sprite, et ton sprite tu t'en sers pas donc elle est à 0 quoi.
Hériter de sprite n'a aucun intérêt si tu ne te sers même pas de ce sprite. Si tu veux utiliser la méthode "draw", hérite de sf::Drawable.
Pour récupérer le rectangle englobant de ton vertexArray, il faudrait que tu crées une méthode qui le renvoie. (qui renvoie m_vertices.getBounds() donc)

Erutan

  • Newbie
  • *
  • Messages: 2
    • Voir le profil
    • E-mail
Re : Problème avec getGlobaBound
« Réponse #2 le: Juin 04, 2014, 09:28:10 am »
C'est Parfait ça marche, merci  ;D