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.