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

Auteur Sujet: [Résolu] Comportement anormal de la méthode push_back de std::vector<sf::Sprite>  (Lu 1936 fois)

0 Membres et 2 Invités sur ce sujet

Greak

  • Newbie
  • *
  • Messages: 12
    • Voir le profil
Bonjour,

J'ai un souci pour le moins étrange :

std::vector<sf::Sprite> test;
test.push_back(sf::Sprite());

Ces 2 lignes devraient en théorie créer un vector et y ajouter un Sprite. Eh bien chez moi je me retrouve avec 272 fois le même Sprite (c'est le debugger qui me le dit) !
Si je fais une boucle pour ajouter 4 Sprites par exemple, alors je me retrouve avec 4x272 fois le même Sprite...
Si je créé 2 vecteurs différents et que j'ajoute un Sprite différent sur chacun d'entre eux, les Sprites des 2 vecteurs seront différents (mais identiques au sein d'un même vecteur).
Enfin, si je fais un vecteur de pointeur de Sprites, tout se passe comme prévu (1 seul sf::Sprite* ajouté). De même, un vecteur de sf::Texture fonctionne correctement (sans même parler de pointeurs).

Je vous joins mon bout de code où ça coince. Ma classe personnelle SpriteManager a pour but de gérer des animations de sprites. On lui fournit un "spriteFile", c'est-à-dire une image contenant plusieurs sprites, et ma classe se charge d'afficher un certain sprite à un instant t. Les différents sprites affichés les uns après les autres forment une animation (un personnage qui bouge par exemple). SpriteManager fonctionnait très bien avec un seul spriteFile.
Désormais, je cherche à pouvoir utiliser plusieurs spriteFiles pour avoir plusieurs "couches". L'objectif est le même, mais on décomposera cette fois le personnage en une couche "pieds", puis "corps", puis "tête", ce qui permettra par exemple de ne pas afficher les pieds lorsqu'on est dans l'eau (sinon on marcherait sur l'eau !)
(click to show/hide)
Les lignes sprites.push_back(sf::Sprite()); et test.push_back(sf::Sprite()); ont le même problème.

Le .h :
(click to show/hide)


Et je joins 2 petits screenshots pour illustrer mes propos.

Merci d'avance pour vos réponses ! :)
« Modifié: Avril 25, 2016, 10:42:39 pm par Greak »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Tu as vérifié autrement qu'avec le debugger ? Genre std::cout << test.size();
Laurent Gomila - SFML developer

Greak

  • Newbie
  • *
  • Messages: 12
    • Voir le profil
Ah oui tiens, avec la console j'ai une taille correct (1 pour le vecteur "test")...
Ca va être sympathique pour débugger mes textures qui ne s'affichent pas toutes sans debugger ! :-\

Par contre, pourquoi le debugger affiche n'importe quoi du coup ?

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Parce que c'est de la merte ;)

QtCreator c'est très bien mais j'ai toujours trouvé leur intégration du debugger désastreuse. A moins que ce ne soit le portage de gdb sous Windows qui est foireux.
Laurent Gomila - SFML developer

Greak

  • Newbie
  • *
  • Messages: 12
    • Voir le profil
Ok, eh bien merci pour ces réponses ! Je marque le sujet comme résolu.