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

Auteur Sujet: [Résolu]Dessiner un objet dans une classe  (Lu 3612 fois)

0 Membres et 1 Invité sur ce sujet

Develog

  • Full Member
  • ***
  • Messages: 100
    • Voir le profil
    • E-mail
[Résolu]Dessiner un objet dans une classe
« 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
« Modifié: Octobre 25, 2014, 04:09:50 pm par Develog »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Dessiner un objet dans une classe
« Réponse #1 le: Octobre 18, 2014, 06:11:25 pm »
Il va falloir être un peu plus précis que "ça marche pas" ;)
Laurent Gomila - SFML developer

Develog

  • Full Member
  • ***
  • Messages: 100
    • Voir le profil
    • E-mail
Re : Dessiner un objet dans une classe
« Réponse #2 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 :/

Develog

  • Full Member
  • ***
  • Messages: 100
    • Voir le profil
    • E-mail
Re : Dessiner un objet dans une classe
« Réponse #3 le: Octobre 21, 2014, 08:48:11 pm »
Personne ?  :-[

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Dessiner un objet dans une classe
« Réponse #4 le: Octobre 21, 2014, 09:36:26 pm »
Sans voir de code, qu'est-ce que tu veux qu'on te dise ?
Laurent Gomila - SFML developer

Develog

  • Full Member
  • ***
  • Messages: 100
    • Voir le profil
    • E-mail
Re : Dessiner un objet dans une classe
« Réponse #5 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.

Develog

  • Full Member
  • ***
  • Messages: 100
    • Voir le profil
    • E-mail
Re : Dessiner un objet dans une classe
« Réponse #6 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
« Modifié: Octobre 22, 2014, 12:33:48 pm par Develog »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Dessiner un objet dans une classe
« Réponse #7 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.
Laurent Gomila - SFML developer

Develog

  • Full Member
  • ***
  • Messages: 100
    • Voir le profil
    • E-mail
Re : Dessiner un objet dans une classe
« Réponse #8 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);
 

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Dessiner un objet dans une classe
« Réponse #9 le: Octobre 22, 2014, 03:12:43 pm »
Oui c'est ça. Si ça crash, utilise ton debugger.
Laurent Gomila - SFML developer

Develog

  • Full Member
  • ***
  • Messages: 100
    • Voir le profil
    • E-mail
Re : Dessiner un objet dans une classe
« Réponse #10 le: Octobre 25, 2014, 04:09:42 pm »
Une recompilation a suffit pour faire disparaître ce "bug"

Merci de votre aide !