Forum de la communauté SFML

Aide => Graphique => Discussion démarrée par: Mew300 le Juin 03, 2017, 07:09:46 pm

Titre: [Résolu] RenderTarget draw Sprite -> exception
Posté par: Mew300 le Juin 03, 2017, 07:09:46 pm
Bonjour,

Pour faire simple, je ne comprend pas pourquoi je ne peux pas faire ça :

void DrawableObject::draw(sf::RenderTarget& target, sf::RenderStates states) const {
        target.draw(*m_sprite, states);
}
m_sprite est un pointeur vers un Sprite.

Alors que je peux faire ça :

void DrawableObject::draw(sf::RenderTarget& target, sf::RenderStates states) const {
        target.draw(m_sprite, states);
}
m_sprite n'est pas un pointeur mais directement un object Sprite.

-> Une exception apparaît à la ligne du target.draw dans le premier cas.
Pourriez-vous m'expliquer pourquoi ?

Merci d'avance.
Titre: Re: RenderTarget draw Sprite -> exception
Posté par: Cpl.Bator le Juin 03, 2017, 09:24:33 pm
pointeur null ?
Titre: Re: RenderTarget draw Sprite -> exception
Posté par: Mew300 le Juin 03, 2017, 10:46:27 pm
Nope quand je fais std::cout << m_sprite ça m'affiche bien une adresse.

Par contre, y'avait un problème au niveau de la texture donc en modifiant un peu l’opérateur d'affectation de mon objet, j'ai réussi à virer l'exception mais le RenderTarget ne me dessine rien.

Et quand dans la fonction draw, je mets un petit
std::cout << m_sprite->getTextureRect().width << std::endl;
Il m'affiche bien la taille de la texture. En gros ça voudrait dire que tous les attributs de la texture sont copiés sauf l'image en fait...

Le problème vient peut-être de l'affectation, je l'ai faite comme ça :
m_sprite = new sf::Sprite(*other.m_sprite->getTexture());
Titre: Re: RenderTarget draw Sprite -> exception
Posté par: Cpl.Bator le Juin 03, 2017, 11:20:11 pm
Citer
m_sprite = new sf::Sprite(*other.m_sprite->getTexture());

getTexture() est const.

je ferais une copie :
Citer
m_sprite = new sf::Sprite(sf::Texture(*other.m_sprite->getTexture()));

Mais c'est pas bon non plus.
il ne faut pas que tu récupère une texture venant d'un sprite pour en faire d'autres.
fait une classe qui regroupe toute tes textures & autres asset ( resource manager )
& l'utilisation des pointeurs rend ton code risqué
Titre: Re: RenderTarget draw Sprite -> exception
Posté par: Mew300 le Juin 04, 2017, 02:44:43 pm
Je vois.
Du coup j'ai réorganisé le truc en ajoutant une classe TextureManager et un attribut m_textureName à mon objet, et maintenant ça fonctionne bien.

Merci beaucoup.