Bonjour à tous!
Je travaille actuellement sur un projet de jeu video pour le lycée (un RTS, si vous voulez savoir, mais le problème n'est pas là ^^), et je rencontre un problème lors de mon utilisation de sf::text dans l'écran de menu principal du jeu
J'ai beau ne pas avoir d'erreur de compilation, cela fonctionne avec un code minimal (avec juste un main.cpp et quelques ligne de test pour tester le code qui semble poser problème)
Je pourrais simplement contourner le problème en utilisant des sprites sur lesquels j'appliquerais des textures où j'aurais déjà écris dessus les textes correspondant, mais cela poserais un probleme pour l'utilisation de fichier de langue ou de sauvegarde.
Ici mon probleme vient je pense du fait que j'utilise une "classe de chargement", c'est à dire que j'ai une classe qui charge les texture, les fichiers textes de sauvegarde ou de langue, les musiques... etc... au lancement du programme, cette classe de chargement n'étant instanciée qu'une seule fois. Ensuite cette classe passe ses attributs au différentes classe scène (comme Scene_MainMenu, Scene_OptionsMenu, Scene_Game...), qui s'en sert pour afficher des unités, des textes, de GUI... etc.
Je sais c'est pas très orthodoxe comme méthode mais sur le papier ça avait le mérite d'être pas trop compliqué et fonctionnel pour mon projet, l'objectif étant de reproduire et d'améliorer un peu une partie du moteur de jeu de Warcraft II.
Mais revenons à nos moutons! J'ai donc un problème d'affichage de sf::text lorsque j'utilise la méthode la classe de chargement (pourtant je n'ai aucun problème lorsque j'utilise des textures et des sprites).
Pour indication:
je code en C++
j'utilise Code:Blocks
j'utilise SFML 2.1
Tout d'abord je créé un sf::String dans la classe Scene_Loading pour le garder en mémoire de cette manière:
//Dans le constructeur de Scene_Loading
locale local;
m_StringNewGame = String("Nouvelle partie", local);
Ensuite je cherche de la même manière un sf::font:
//Toujours dans le constructeur de Scene_Loading
if(!m_Font1.loadFromFile("Ressources/Font/arial.ttf"))
{
//Erreur
cout << "Fail dans le loading de arial.ttf" << endl;
}
Maintenant que j'ai le sf::String et le sf::font dans la classe Scene_Loading (avec leur "getteur" correspondant), je créé un pointeur sur le sf::Text que je voudrais afficher dans le constructeur de la classe Scene_MainScreen (qui affiche et gère le menu principal du jeu) comme ceci:
Scene_MainScreen::Scene_MainScreen(Scene_Loading *Loaded)
{
//D'autres bidouillage sur la taille de l'écran, des setScale()... etc...
//Chargement des textes
m_TextNewGame = new Text(Loaded->getStringNewGame(), Loaded->getFont1(), 50); //Construction du texte nouvelle partie à partir Scene_Loading chargée
//D'autres texte basés sur le même principe
//D'autres modif qui n'agissent pas sur le sf::Text ...
}
Ensuite, maintenant que j'ai chargé le sf::Text et la Scene_MainScreen, je la lance à l'aide de la méthode LaunchMainScreen(RenderWindow *App) qui reprend la boucle 'infinie' du jeu:
void Scene_MainScreen::LaunchMainScreen(RenderWindow *App)
{
bool fin_MainScreen = false;
//Tant qu'on est sur le mainScreen
while(App->isOpen() && fin_MainScreen == false)
{
//Zone event
sf::Event event;
while (App->pollEvent(event))
{
//Conditions pour fermer la fenetre
if (event.type == sf::Event::Closed || m_TextQuit->getGlobalBounds().contains(WorldPosition) == true)
{
App->close();
}
}
App->clear(Color::Blue);
App->draw(*m_TextNewGame);
//D'autre draw(); ...
App->display();
}
}
Voilà... Et bien là je n'ai aucune erreur de compilation (j'ai enlevé volontairement les morceaux de codes inutiles qui n'agissent pas sur le sf::text pour alléger la lecture
), mais le code plante lorsque le programme arrive dans la Scene_MainScreen. Je n'arrive pas à isoler et gérer correctement l'erreur, c'est sans doute sous mes yeux mais je ne la vois pas comme d'habitude ^^. Je pense que c'est lors du passage du sf::font et du sf::String à la Scene_MainScreen.
Mon objectif est juste d'arriver à afficher correctement ce satané sf::Text! Mais cela ne veut absolument pas fonctionner dans mon code actuel
Si vous avez au moins une piste, pas forcément une solution miracle, je suis preneur!
En espérant que je ne vous ai pas trop embrouillé, et que j'ai été suffisamment compréhensible ^^
Voili voilu
Je m’excuse d'avance si il manque quoi que ce soit dans mes explications ou dans mon code! ^^'