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

Auteur Sujet: [Résolu] RenderTarget draw Sprite -> exception  (Lu 2894 fois)

0 Membres et 1 Invité sur ce sujet

Mew300

  • Newbie
  • *
  • Messages: 3
    • Voir le profil
[Résolu] RenderTarget draw Sprite -> exception
« 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.
« Modifié: Juin 04, 2017, 02:45:14 pm par Mew300 »

Cpl.Bator

  • Hero Member
  • *****
  • Messages: 540
    • Voir le profil
Re: RenderTarget draw Sprite -> exception
« Réponse #1 le: Juin 03, 2017, 09:24:33 pm »
pointeur null ?

Mew300

  • Newbie
  • *
  • Messages: 3
    • Voir le profil
Re: RenderTarget draw Sprite -> exception
« Réponse #2 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());

Cpl.Bator

  • Hero Member
  • *****
  • Messages: 540
    • Voir le profil
Re: RenderTarget draw Sprite -> exception
« Réponse #3 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é

Mew300

  • Newbie
  • *
  • Messages: 3
    • Voir le profil
Re: RenderTarget draw Sprite -> exception
« Réponse #4 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.