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

Auteur Sujet: Gérer une fenêtre avec une classe  (Lu 2554 fois)

0 Membres et 1 Invité sur ce sujet

zedex

  • Newbie
  • *
  • Messages: 27
    • Voir le profil
Gérer une fenêtre avec une classe
« le: Octobre 23, 2013, 12:16:35 am »
Bonsoir.

Je cherche à gérer une fenêtre par une classe du genre :

Classe :
#include <SFML/System.hpp>
#include <SFML/Graphics.hpp>

class Window : public sf::RenderWindow
{
    public :
        Window();

        sf::Sprite  getSprite();        // Renvoie le sprite de la fenetre.

    private :
        sf::RenderWindow    m_window;   // Render Window.
        sf::Texture         m_texture;  // Texture contenant la feuille de tuiles.
        sf::Sprite          m_sprite;   // Sprite contenant et affichant la texture.

};

Méthodes :
Window::Window()
{
    // Cree une fenetre.
    m_window.create(sf::VideoMode(400,350),"My Window");

    // Chargement de la texture de présentation.
    m_texture.loadFromFile("image.png");

    // Incorporation de la texture dans le sprite.
    m_sprite.setTexture(m_texture);
}

sf::Sprite Window::getSprite()
{
    return m_sprite;
}

main :
int main(int argc, char *argv[])
{
    Window myWindow;

    while (myWindow.isOpen())
    {
        sf::Event event;

        while (myWindow.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
            {
               myWindow.close();
            }
        }

        myWindow.clear();
        myWindow.draw(myWindow.getSprite());
        myWindow.display();
    }

    return 0;
}

À la compilation il n'y a pas de problèmes, mais lors de l'exécution la fenêtre s'ouvre puis se ferme immédiatement. Est-ce que je m'y prend mal ?

Merci.

Threonine

  • Newbie
  • *
  • Messages: 5
    • Voir le profil
Re : Gérer une fenêtre avec une classe
« Réponse #1 le: Octobre 23, 2013, 12:33:56 am »
Tu n'as pas besoin d'un attribut RenderWindow (m_window dans ta classe) puisque ta classe est elle même un RenderWindow. Je pense que tu peux le supprimer, et modifier la première ligne de ton constructeur pour que la méthode soit directement appelée sur l'instance de te classe.

Il faut donc remplacer :
m_window.create(sf::VideoMode(400,350),"My Window");

Par simplement :
create(sf::VideoMode(400,350),"My Window");

zedex

  • Newbie
  • *
  • Messages: 27
    • Voir le profil
Re : Gérer une fenêtre avec une classe
« Réponse #2 le: Octobre 23, 2013, 08:50:00 am »
Ha oui exact, merci beaucoup. Tout marche nikel.
En revanche dans mon code j'utilise des commandes :
create(sf::VideoMode(400,350),"My Window");
// ou
this->create(sf::VideoMode(400,350),"My Window");

setIcon(m_icon.getSize().x,m_icon.getSize().y,m_icon.getPixelsPtr());
//ou
this->setIcon(m_icon.getSize().x,m_icon.getSize().y,m_icon.getPixelsPtr());
Les deux lignes fonctionnent, mais laquelle est "la plus propre", "la plus sûre" ?

G.

  • Hero Member
  • *****
  • Messages: 1593
    • Voir le profil
Re : Gérer une fenêtre avec une classe
« Réponse #3 le: Octobre 23, 2013, 10:08:33 am »
Ecrire this-> ou pas quand on a le choix, c'est surtout une question de goût, les avis divergent. En tout cas quand on n'est pas trop à l'aise je pense que c'est mieux de l'écrire.
Bref si t'as le choix, tu fais comme tu le sens. :D

zedex

  • Newbie
  • *
  • Messages: 27
    • Voir le profil
Re : Gérer une fenêtre avec une classe
« Réponse #4 le: Octobre 23, 2013, 11:55:10 am »
D'accord, merci :D

 

anything