Bienvenue, Invité. Merci de vous connecter ou de vous inscrire. Avez-vous oublié d'activer ?

Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Messages - Alkanor

Pages: [1]
1
Général / Re : Problème de gestion de polices
« le: Février 17, 2013, 06:56:03 pm »
Merci, j'aime l'idée du singleton, je vais étudier ça de plus près =)

Et bravo pour cette superbe bibliothèque qu'est la SFML, Monsieur Gomila !

2
Général / Re : Problème de gestion de polices
« le: Février 16, 2013, 02:56:48 pm »
Merci beaucoup c'était effectivement la solution.

Mais comment faire pour que mon instance de FontManager soit accessible dans toutes les classes de mon projet (admettons qu'il y ai 5 classes qui aient besoin de charger des fonts) sans le passer en paramètre à chaque fois ? Ça marcherait si je définis mes vector en static dans les attributs de FontManager et que j'instancie la classe dans chaque fonction qui en aurait besoin ?

3
Général / Problème de gestion de polices
« le: Février 16, 2013, 11:41:57 am »
Bonjour,

j'ai créé une application utilisant SFML et je souhaitais l'améliorer en ajoutant un gestionnaire de polices qui gèrerait le chargement des polices en veillant à ce qu'une police ne soit chargée qu'une fois en mémoire.

Cependant j'ai du faire une erreur dans la gestion de la mémoire car après avoir chargé une police le programme plante dès que je sollicite le texte (Move, Draw...)

Je vous montre un code minimal qui ne fonctionne pas, si quelqu'un pouvait m'aider ce serait sympa :) Je suis sûr que le problème est tout bête...

Voici FontManager.h :

#ifndef FONTMANAGER_H
#define FONTMANAGER_H

#include <iostream>
#include <SFML/Graphics.hpp>
#include <vector>

class FontManager
{
    public:
        // Constructeur
        FontManager();

        // Retourne la police correspondante
        sf::Font getFont(const std::string &fontToLoad);

    protected:

    private:
        std::vector<sf::Font> fonts;    // Polices chargees
        std::vector<std::string> fontsNames;    // Noms des polices chargees
};

#endif // FONTMANAGER_H
 

FontManager.cpp :

#include "FontManager.h"

// Constructeur
FontManager::FontManager()
{

}

// Retourne la police correspondante
sf::Font FontManager::getFont(const std::string &fontToLoad)
{
    /******** Declarations ********/

    int nbFonts;

    /******** Initialisation ********/

    nbFonts = this->fonts.size();

    /******** Traitement ********/

    // Recherche de la police
    for (int i(0); i < nbFonts; ++i)
    {
        if (this->fontsNames[i] == fontToLoad)
        {
            return this->fonts[i];
        }
    }

    // Nouvelle police
    this->fonts.push_back(sf::Font());

    if (!this->fonts[nbFonts].LoadFromFile(fontToLoad))
    {
        std::cerr << "Chargement de la police echoue (" << fontToLoad << ")\n" << std::flush;
    }

    this->fontsNames.push_back(fontToLoad);

    return this->fonts[nbFonts];
}
 

Et main.cpp :

#include "FontManager.h"

int main()
{
    /******** Declarations ********/

    sf::RenderWindow window;
    FontManager fontManager;
    sf::String text;
    sf::Event Event;

    /******** Initialisation ********/

    window.Create(sf::VideoMode::GetMode(0), "Test");
    text.SetFont(fontManager.getFont("res/fonts/akoom.ttf"));   // FAIT PLANTER LE PROGRAMME
    text.SetText("test");
    text.SetColor(sf::Color(200, 200, 200));

    /******** Traitement ********/

    window.Draw(text);  // FAIT PLANTER LE PROGRAMME
    window.Display();

    while (window.IsOpened())
    {
        while (window.GetEvent(Event))
        {
            if (Event.Type == sf::Event::Closed)
                window.Close();
        }
    }

    return 0;
}
 

Ce programme fonctionne lorsque je commente la ligne
text.SetFont(fontManager.getFont("res/fonts/akoom.ttf"));
ou lorsque je charge la police directement dans le main sans passer par le gestionnaire (bien entendu la police "res/fonts/akoom.ttf" existe.

Pages: [1]
anything