Au lieu d'utiliser plusieurs textures, regroupe les images dans une seule image. Ainsi tu n'auras qu'une texture sur laquelle travailler.
Étant donné la taille de mon projet, je comptais réserver ça pour un autre programme : j'essaye de ne pas m'attarder pour l'instant sur tous les éléments nécessaires pour un jeu de taille conséquente, mon objectif est de réussir à faire un programme simple et fonctionnel avec la SFML, je préfère y aller petit à petit sans me compliquer la tâche.
Ensuite, dans ton code actuel tu place une texture sur un sprite sans même vérifier si la texture est "loader".
A l'inverse de loadFromFile, setTexture est de type void ; pour vérifier si la texture est bien appliquée au sprite, j'ai utilisé la fonction getTexture en vérifiant si la référence retournée était NULL ou pas :
void Jeton::modifierEtat(int p_etatJeton)
{
m_etatJeton = p_etatJeton;
m_sprite.setTexture(m_texture[p_etatJeton]);
if (m_sprite.getTexture() == NULL) // La condition n'est jamais vérifiée !
std::cout << "sprite sans texture !";
}
Rien ne s'affiche.
Pour vérifier que ce n'est pas juste moi qui ne sait pas me servir de la fonction, j'ai placé la condition avant le setTexture :
void Jeton::modifierEtat(int p_etatJeton)
{
m_etatJeton = p_etatJeton;
if (m_sprite.getTexture() == NULL) // Crash au lancement du programme
std::cout << "sprite sans texture !";
m_sprite.setTexture(m_texture[p_etatJeton]);
}
Crash au démarrage.
Étant donné que je n'ai pas eu de crash avec le premier code, il y a bien une référence à une texture ... Est-ce que cela veut dire que le tableau de textures pointe vers des textures vides ?
Désolée je me suis un peu égarée du problème j'essayais de comprendre ce que tu voulais faire exactement. L'affichage de carrés blancs signifie que ta texture ne s'est probablement pas chargée. Ton fichier ressources est-il bien dans le fichier de ton projet?
Il serait bien de faire les vérifications en utilisant la console pour afficher le résultat des différents tests pendant la phase de debug.
Pas de soucis, toutes les informations sont bonnes à prendre
Mes ressources sont toutes dans le même dossier "ressources" ; la grille se charge sans problème, et j'ai séparé la "sélection" qui indique sur quelle case pointe le joueur dans un nouvel objet. Le sprite se charge sans soucis.
Autre chose, pour ne pas que chaque instance de la classe Jeton retente les loadFromFile, la variable m_textureChargee est maintenant en statique, avec une condition avant le chargement des textures pour que ce dernier n'intervienne qu'une seule fois.
Peut-être que des morceaux de code où mes sprites s'affichent vous aideraient à m'aider ? Voici Selection, que l'on peut déplacer sur chacune des cases :
Selection.h :
class Selection
{
public:
enum Direction { haut, droite, bas, gauche };
Selection();
void deplacer(Direction);
void centrer();
void positionner();
void afficher(sf::RenderWindow&);
private:
sf::Texture m_texture;
bool m_textureChargee;
sf::Sprite m_sprite;
int m_emplacement;
bool m_visible;
};
Seletion.cpp :
Selection::Selection()
{
if (!m_texture.loadFromFile("ressources/selection.png"))
m_textureChargee = false;
else
m_textureChargee = true;
assert (m_textureChargee);
m_sprite.setTexture(m_texture);
m_visible = false;
this->centrer();
}
void Selection::centrer ()
{
m_emplacement = 4;
this->positionner();
}
void Selection::positionner ()
{
m_sprite.setPosition(128 + (m_emplacement%3)*(120+12), 16 + (m_emplacement/3)*(120+12));
}
void Selection::afficher(sf::RenderWindow& p_fenetre)
{
if (m_textureChargee)
p_fenetre.draw(m_sprite);
}
Edit : J'ai encore réduit le tableau et l'énumération de jeton pour placer croixSelection et cercleSelection dans le fichier Selection.cpp. Je gère donc dans ce dernier un tableau de texture aussi (mais non statique) et tout fonctionne pour la sélection.
Je peux copier le fichier si vous estimez ça utile (mais ça commence à faire un paquet de fonctions).