J'ai une classe Personnage qui renvoie un sprite SFML auquel j'ai setTexture une texture que je renvoie via une méthode.
Mon problème c'est que en faisant remonter mon sprite via des méthodes la texture disparait et le fameux problème du carré blanc apparait mais sur le tuto de sfml il y'a peut de chose pour contrer ce problème.
Il y'a t'il des gens qui aurait des pistes ?
- Edité par GwendalBernardi 17 mars 2019 à 15:35:17
void Fenetre::AffichageSpriteGraphiques(std::vector<Conteneur> tableau)
{
for (int w = 0; w < tableau.size(); w++)
{
// On récupère les valeurs du Conteneur
positionSpriteADessiner = tableau[w].getPosition();
spriteADessiner = tableau[w].getSprite();
// On associe le sprite et la position
spriteADessiner.setPosition(positionSpriteADessiner[0], positionSpriteADessiner[1]);
// On pose la texture sur le sprite.
spriteADessiner.setTexture(tableau[w].getTexture());
spriteADessiner.setScale(xScale, yScale);
// Enfin on dessine le sprite sur la fenetre :
window.draw(spriteADessiner);
}
}
Et ce que je mets dans le tableau de conteneur c'est ça :
// Le constructeur permet de coller la texture au sprite
BodyPersonnage::BodyPersonnage()
{
Body.loadFromFile("../Ressources/Images/index.jpg");
}
BodyPersonnage::~BodyPersonnage()
{
}
// Cette méthode permet de renvoyer le conteneur du corps.
Conteneur BodyPersonnage::getConteneur(int x, int y)
{
std::vector<int> positionBody{ x,y };
Conteneur conteneurBody(SBody, positionBody,Body);
return conteneurBody;
}
J'ai essayé de rajouter la texture dans mon conteneur (qui sert juste de tableau avec plusieurs type dedans en gros) mais ça ne marche pas non plus avant je faisais le setTexture directement dans mon constructeur de BodyPersonnage
SBody étant un sprite définit dans mon BodyPersonnage.h positionBody un vector <int> et Body la texture elle aussi définit dans le .h
class BodyPersonnage
{
public:
/************* Créateur et de la classe BodyPersonnage **************/
BodyPersonnage();
~BodyPersonnage();
// Cette méthode permet de renvoyer le conteneur du bras gauche.
Conteneur getConteneur(int x, int y);
private:
// Sprite et la texture associé au corps.
sf::Texture Body;
sf::Sprite SBody;
// Vector contenant la position du sprite du bras gauche
std::vector<int> positionBody;
};
Merci,
- Edité par GwendalBernardi 18 mars 2019 à 12:32:31
Utilise des références (contantes) en paramètre, là tu fais des copies. Et pour les fonction n charge de renvoyer des textures, renvoie également des références (sinon, c'est des copies).
int fonction_avec_copie(int variable)
{
variable++;
}
int fonction_par_reference(int &variable)
{
variable++;
}
int main()
{
int var1 = 1;
int var2 = 1;
fonction_avec_copie(var1);
fonction_par_reference(var2);
std::cout << var1 << std::endl; // output : 1
std::cout << var2 << std::endl; // output : 2
return 0;
}
Ceci est un exemple de ce qu'il se passe quand on passe une variable par référence ou pas.
Cependant de meilleurs exemples ici , c'est avec ce lien que j'ai appris et que j'ai compris mais je n'ai pas assez d'expérience pour te dire ce qu'il en est réellement.
Je te conseille de refaire un tour sur les pointeurs avant de commencer à faire du graphique, ça te sera très utile.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Architecte logiciel - Software craftsmanship convaincu.
Utilise des références (contantes) en paramètre, là tu fais des copies. Et pour les fonction n charge de renvoyer des textures, renvoie également des références (sinon, c'est des copies).
Architecte logiciel - Software craftsmanship convaincu.