Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: sf::Text qui ne s'affiche pas  (Lu 3007 fois)

0 Membres et 1 Invité sur ce sujet

loustak

  • Newbie
  • *
  • Messages: 13
    • Voir le profil
sf::Text qui ne s'affiche pas
« le: Février 13, 2015, 06:07:52 pm »
Bonjour,
J'essaye de créer une classe qui contiennent un sf::Font avec un sf::Text. Voici le code de la classe :
#include "..\inc\Text.h"

Text::Text() {
}

Text::Text(std::string fontPath, std::string textToDraw) {
        if (!font.loadFromFile(fontPath))
        {
                std::cout << "error while openning a font" << std::endl;
        }
        text.setFont(font);
        text.setString(textToDraw);
}

Text::~Text() {
}
 

Et son header :
#pragma once
#include <SFML/Graphics.hpp>
#include <iostream>

class Text : public sf::Font, public sf::Text
{
public:
        Text();
        Text(std::string fontPath, std::string textToDraw);
        virtual ~Text();

private:
        sf::Font font;
        sf::Text text;
};

Enfin j'utilise mon code comme ceci :
Text txVersion("../data/font/Mono.ttf", "");
        version = "Alpha 0.1";
        txVersion.setString(version);
        txVersion.setCharacterSize(24);
        txVersion.setColor(sf::Color::White);
Et enfin la boucle d'affichage :
window.clear(sf::Color::Black); // Clear the window
        txVersion.setPosition(10, 10);
        window.display(); // Display
Cependant mon texte n’apparaît pas...
Je pense que cela viens de ma classe Text, à un moment je pense que la sf::Font ou sf::Text est supprimé de la mémoire mais je n'arrive pas à voir ou ...

Merci de votre aide.
« Modifié: Février 13, 2015, 07:42:43 pm par Laurent »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : sf::Text qui ne s'affiche pas
« Réponse #1 le: Février 13, 2015, 07:43:53 pm »
Ta classe hérite de sf::Font et sf::Text, et elle contient un sf::Font et un sf::Text. Ca fait un de trop à chaque fois.
Laurent Gomila - SFML developer

loustak

  • Newbie
  • *
  • Messages: 13
    • Voir le profil
Re : sf::Text qui ne s'affiche pas
« Réponse #2 le: Février 13, 2015, 09:36:19 pm »
Arf, merci.
Du coup comment pourrais-je faire afin de créer une classe qui me permettent d'utiliser les fonctionnalité de sf::Font & sf::Text tout ceci dans une seul classe ? ça fait un moment que je test des choses sans rien trouvé de fonctionnel.
Merci encore  :)

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : sf::Text qui ne s'affiche pas
« Réponse #3 le: Février 13, 2015, 10:59:45 pm »
Tu déclares ta classe avec toutes les fonctions que tu aimerais dedans. Ensuite tu implementes, à base de sf::Text et sf::Font. Facile.
Laurent Gomila - SFML developer

loustak

  • Newbie
  • *
  • Messages: 13
    • Voir le profil
Re : sf::Text qui ne s'affiche pas
« Réponse #4 le: Février 14, 2015, 07:45:24 am »
Ok, je vais faire comme ça, encore merci !

loustak

  • Newbie
  • *
  • Messages: 13
    • Voir le profil
Re : sf::Text qui ne s'affiche pas
« Réponse #5 le: Février 14, 2015, 08:39:26 am »
Bon alors, j'ai commencé mais je me heurte à un problème, j'ai du faire une bêtise dans ma fonction draw car elle ne dessine rien du tout !
// Draw an entity on the screen
void Entity::draw(sf::RenderWindow &window) {
        window.draw(sprite);
}
Header :
class Entity : public sf::RenderWindow
{
public:
        Entity();
        virtual ~Entity();
        void draw(sf::RenderWindow &window);
        void setPosition(float x, float y);
        float getPositionX() const;
        float getPositionY() const;
        float getWidth() const;
        float getHeight() const;
        void setGravity(bool gravityForce);
        bool getGravity() const;
        void setWheight(float wheightForce);
        float getWheight() const;

private:
        sf::Sprite sprite;
        bool gravity;
        float wheight;
};
C'est la classe mère de la découle ma classe Text:
class Text : public Entity
{
public:
        Text();
        Text(std::string const& path, std::string const& string);
        virtual ~Text();
        void loadFont(std::string const& path);
        void setFont(sf::Font const& newFont);
        const sf::Font* getFont() const;
        void setText(std::string const& string);
        std::string getText() const;
        void setColor(sf::Color const& color);
        sf::Color getColor() const;
        void setCharacterSize(unsigned int size);
        unsigned int getCharacterSize() const;
        void setStyle(sf::Uint32 const& style);
        sf::Uint32 getStyle() const;

private:
        sf::Font font;
        sf::Text text;
};

Je ne comprend pas ou j'ai fait mon erreur... Merci de votre aide.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : sf::Text qui ne s'affiche pas
« Réponse #6 le: Février 14, 2015, 09:35:34 am »
Citer
class Entity : public sf::RenderWindow
What the hell ??!

Sinon, tu ne montres aucune ligne de code, juste des déclarations, donc dur dur de voir ce qui ne va pas ;)
Laurent Gomila - SFML developer

loustak

  • Newbie
  • *
  • Messages: 13
    • Voir le profil
Re : sf::Text qui ne s'affiche pas
« Réponse #7 le: Février 14, 2015, 09:53:04 am »
class Entity : public sf::RenderWindow
Heu, oui ça c'était pour avant c'est supprimer.

Pour ceux qui est des fichiers alors :
Ma classe Mère Entity :
(click to show/hide)

Ma classe Enfant qui hérite de Entity : Text
(click to show/hide)

Et enfin comment je l'utilise dans la boucle principale de ma classe Game :

Text text("Mono.ttf", "salut"); // Je le déclare quelque part dans le code

void Game::draw() {
        window.clear(sf::Color::Black); // Clear the window
        text.draw(window); // On l'affiche ! Mais sa ne fonctionne pas, sa compile mais pas de texte à l'écran...
        window.display(); // Display
}

Merci. C'est assez étonnant car sur un autre projet j'avais fait la même architecture et sa fonctionner très bien. Mais c'était avec SFML 2.1 je ne sais pas si cela à un rapport.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : sf::Text qui ne s'affiche pas
« Réponse #8 le: Février 14, 2015, 10:17:25 am »
Et ton sprite qui est affiché, à quel moment il est initialisé ? Et le texte, qui s'occupe de l'afficher ?

Tout ça n'a ni queue ni tête, on dirait que tu architectures tes classes un peu au hasard, ça n'a aucune chance de fonctionner. D'ailleurs si tu prends 5 minutes pour analyser tout ça, je suis sûr que toi-même tu peux te rendre compte que ça ne peut pas marcher.

Tu devrais commencer depuis le début (une classe très simple), en réflechissant à ce que tu fais, puis en ajoutant les fonctionnalités et classes de base au fur et à mesure.
Laurent Gomila - SFML developer

loustak

  • Newbie
  • *
  • Messages: 13
    • Voir le profil
Re : sf::Text qui ne s'affiche pas
« Réponse #9 le: Février 14, 2015, 04:23:09 pm »
C'est bon, en recommencent avec peux de fonctions dans mes classes j'ai réussi, merci !