Forum de la communauté SFML

Aide => Général => Discussion démarrée par: Develog le Octobre 18, 2014, 03:57:47 pm

Titre: [Résolu]Dessiner un objet dans une classe
Posté par: Develog le Octobre 18, 2014, 03:57:47 pm
Bonjour,

Je suis confronté à un petit problème, j'aimerai dessiner un objet dans une classe autre que ma classe où se trouve ma boucle principale avec le Sf::RenderWindow.

Donc je pensais faire un truc du genre mais bon ça marche pas du coup j'ai comme ceci (deuxième morceau de code)

Button button1;

virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const
        {
            target.draw(button1, states);
        }

void GUI::Update(sf::RenderTarget *target)
{
    target->draw(bbutton1);
}

Mais rien non plus avec ça donc je me demande comment on fait exactement, jusqu'à maintenant j'ai jamais eu besoin de faire ça ...

Merci d'avance
Titre: Re : Dessiner un objet dans une classe
Posté par: Laurent le Octobre 18, 2014, 06:11:25 pm
Il va falloir être un peu plus précis que "ça marche pas" ;)
Titre: Re : Dessiner un objet dans une classe
Posté par: Develog le Octobre 19, 2014, 12:22:35 am
J'avais oublié qu'on ne pouvais pas encore lire dans les pensées  8)
Alors en faites c'est juste que mon bouton ne s'affiche pas ... Si je passe par la classe où se trouve ma boucle principale je n'ai aucun soucis tout s'affiche.
Donc j'aimerai tout simplement savoir si la méthode est la bonne ;)

Et désolé je ne peux pas fournir plus de code, je suis loin de mon ordinateur pendant quelques jours :/
Titre: Re : Dessiner un objet dans une classe
Posté par: Develog le Octobre 21, 2014, 08:48:11 pm
Personne ?  :-[
Titre: Re : Dessiner un objet dans une classe
Posté par: Laurent le Octobre 21, 2014, 09:36:26 pm
Sans voir de code, qu'est-ce que tu veux qu'on te dise ?
Titre: Re : Dessiner un objet dans une classe
Posté par: Develog le Octobre 22, 2014, 11:23:23 am
Il aurait pu être possible que pour faire ça il y a une méthode bien définie ;)
Je vais faire un morceau de code minimal, dès que possible.
Titre: Re : Dessiner un objet dans une classe
Posté par: Develog le Octobre 22, 2014, 12:30:25 pm
Classe Game

#include "Game.h"

Game::Game()
{
    sf::RenderWindow window(sf::VideoMode(WIDTH_WINDOW, HEIGHT_WINDOW), "[V0.01]Relation SFML", sf::Style::Default);
    window.setKeyRepeatEnabled(true);
    window.setFramerateLimit(200);


    Event event1;

    GUI gui;

    while (window.isOpen())
        {
            gui.Time();
            gui.Update(&window);
            sf::Event event;
            while (window.pollEvent(event))
            {
                if (event.type == sf::Event::Closed)
                window.close();
            }
            window.clear();
            window.draw(gui);
            window.display();
        }
}
 

#ifndef GAME_H
#define GAME_H

#include <cstdlib>
#include <time.h>
#include <SFML/Graphics.hpp>

#include "GUI/GUI.h"

#define WIDTH_WINDOW 800
#define HEIGHT_WINDOW 600

class Game
{
    public:
        Game();

    private:
};

#endif // GAME_H


Classe Button (où j'ai enlevé toutes les fonctions pour définir la taille, la couleur etc)

#include "Button.h"

Button::Button()
{
    if (!font.loadFromFile("Resources/arial.ttf"))
    {
        std::cout << "erreur font" << std::endl;
    }
    text_button.setFont(font);
    rect_button.setSize(sf::Vector2f(100, 100));
    rect_button.setFillColor(sf::Color::Red);
}

Button::~Button()
{
    //dtor
}

 

#ifndef BUTTON_H
#define BUTTON_H

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

using namespace std;

class Button : public sf::Drawable, sf::Transformable
{
    public:
        Button();
        virtual ~Button();

    protected:
    private:
        virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const
        {
            target.draw(rect_button, states);
        }

        sf::RectangleShape rect_button;
        sf::Font font;

};

#endif // BUTTON_H
 


Classe GUI
#include "GUI.h"

GUI::GUI()
{
    if(!font.loadFromFile("Resources/arial.ttf"))
        cout << "Error LOADING FONT" << endl;
}

void GUI::Update(sf::RenderWindow*window)
{
    target->draw(b_menu);
}

#ifndef GUI_H
#define GUI_H

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

#include "Button.h"

using namespace std;

class GUI : public sf::Drawable, sf::Transformable
{
    public:
        GUI();

        void Update(sf::RenderWindow *Window);
    private:
        virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const
        {
           
        }

        Button b_menu;

        sf::Font font;
};

#endif // GUI_H
Titre: Re : Dessiner un objet dans une classe
Posté par: Laurent le Octobre 22, 2014, 12:51:04 pm
Tu dessines dans GUI::update, qui est appelé avant window.clear(). Donc aucune chance de voir à l'écran ce que tu auras dessiné dans cette fonction.

Dessine plutôt dans GUI::draw, tu as tout mis en place comme il faut mais tu as laissé cette fonction vide.
Titre: Re : Dessiner un objet dans une classe
Posté par: Develog le Octobre 22, 2014, 02:11:35 pm
Donc en gros je dois faire ? (parce que si c'est comme ça, mon application crash en me disant qu'elle ne répond pas :/

target.draw(b_menu, states);
 
Titre: Re : Dessiner un objet dans une classe
Posté par: Laurent le Octobre 22, 2014, 03:12:43 pm
Oui c'est ça. Si ça crash, utilise ton debugger.
Titre: Re : Dessiner un objet dans une classe
Posté par: Develog le Octobre 25, 2014, 04:09:42 pm
Une recompilation a suffit pour faire disparaître ce "bug"

Merci de votre aide !