Partage
  • Partager sur Facebook
  • Partager sur Twitter

SFML setFont() crash

Sujet résolu
    23 juin 2018 à 12:32:04

    Bonjour j'utilise la libraire SFML pour faire des jeux 2D cependant j'ai un probleme

    J'ai décidé de separer les fonts et les textures + textes dans des classes differentes (Classe Font et class MainWindow)

    Quand depuis MainWindow je crée un sf::Text puis quand je lui applique la methode setFont avec en parametre un font dans dans la classe Font , le programme crash , par contre quand je mets tout ca dans le main , le text se dessine et il n'y a aucune erreur .

    Voici le code :

    font.h

    #ifndef FONTS_H
    #define FONTS_H
    
    #include <SFML/Graphics.hpp>
    #include <iostream>
    
    class Fonts
    {
    public:
        Fonts();
        sf::Font jeux;
        sf::Font titleText;
        sf::Font menuText;
        sf::Font paragraphe;
    };
    
    #endif // FONTS_H

    font .cpp

    #include "fonts.h"
    
    Fonts::Fonts() {
        if (!jeux.loadFromFile("../Fonts/Jeux.ttf")) {
    
        }
    
        if (!menuText.loadFromFile("../Fonts/MenuText.otf")) {
    
        }
    
        if (!paragraphe.loadFromFile("../Fonts/Paragraphe.ttf")) {
    
        }
        if (!titleText.loadFromFile("../Fonts/TitleText.otf")) {
    
        }
    }

    MainWindow.h

    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    
    #include "fonts.h"
    #include <SFML/Graphics.hpp>
    class MainWindow {
    
    public:
        MainWindow();
        sf::Texture snake;
        sf::Sprite snake_sprite;
    
        sf::Text jouer;
        sf::Text options;
        sf::Text credits;
        sf::Text quitter;
    };
    
    #endif // MAINWINDOW_H
    

    mainWindow.cpp

    #include "mainwindow.h"
    
    MainWindow::MainWindow() {
        if (!snake.loadFromFile("../Textures/snake.png")){
            // erreur...
        } else {
            snake_sprite.setTexture(snake);
            snake_sprite.setPosition(0,125);
            snake_sprite.setScale(1.0f,1.0f);
        }
        Fonts f;
        jouer.setCharacterSize(40);
        jouer.setString("Jouer !");
        jouer.setFillColor(sf::Color::White);
        //jouer.setFont(f.menuText);
    
        options.setCharacterSize(40);
        options.setString("Options");
        options.setFillColor(sf::Color::White);
        //options.setFont(f.menuText);
    
        credits.setCharacterSize(40);
        credits.setString("Credits");
        credits.setFillColor(sf::Color::White);
        //credits.setFont(f.menuText);
    
        quitter.setCharacterSize(40);
        quitter.setString("Quitter");
        quitter.setFillColor(sf::Color::White);
        //quitter.setFont(f.menuText);
    }

    main.cpp

    #include "fonts.h"
    #include "mainwindow.h"
    
    int main()
    {
        sf::RenderWindow window(sf::VideoMode(1250, 750), "SFML works!");
        MainWindow mainWindow;
    
        while (window.isOpen())
        {
            sf::Event event;
            while (window.pollEvent(event))
            {
                if (event.type == sf::Event::Closed)
                    window.close();
            }
    
            window.clear();
            window.draw(mainWindow.snake_sprite);
            window.draw(mainWindow.jouer);
            window.draw(mainWindow.options);
            window.draw(mainWindow.credits);
            window.draw(mainWindow.quitter);
            window.display();
        }
    
        return 0;
    }



    Je vous remercie d'avance pour votre aide


    • Partager sur Facebook
    • Partager sur Twitter
      23 juin 2018 à 17:09:18

      Hello,

      Une font c'est comme une texture, elle doit être maintenue en mémoire tant qu'elle est utilisée. Regarde bien dans le constructeur de MainWindow, que se passe-t-il d'après toi avec ta variable f à la fin du scope ?

      -
      Edité par Guit0Xx 23 juin 2018 à 17:12:12

      • Partager sur Facebook
      • Partager sur Twitter

      ...

        23 juin 2018 à 17:41:05

        oh merci beaucoup , j'ai crée le font f dans le main et je l'ai passé dans le MainWindow grace a un pointeur et la ca fonctionne !
        • Partager sur Facebook
        • Partager sur Twitter

        SFML setFont() crash

        × 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.
        • Editeur
        • Markdown