Forum de la communauté SFML

Aide => Graphique => Discussion démarrée par: Engineer le Août 14, 2013, 02:07:52 am

Titre: classe balle
Posté par: Engineer le Août 14, 2013, 02:07:52 am
Salut tout le monde !
Je veux juste afficher un cercle à l'écran via une classe Balle mais je ne sais pour quelle raison cela ne fonctionne pas. Ca fait la fenetre mais ne la mets pas en noir comme voulu. Ca compile.


#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>
#include <SFML/System.hpp>

sf::Event event;
sf::Event::KeyEvent keyevent;
sf::Keyboard::Key key;

class Ball
{
    int CircleR, Redd, Greenn, Bluee;
    sf::CircleShape shape;

    public:

    Ball(int CircleR,int Redd,int Greenn,int Bluee);
    Ball();
    sf::CircleShape getCircle();
    void moveCircle(int x, int y);

};

int main()
{
    Ball ball(100.f, 250, 0, 0);

    sf::RenderWindow window(sf::VideoMode(800,600), "SFML Test");
    while(window.isOpen())
    {
        while(window.pollEvent(event))
        {
            switch(event.type)
            {
                case sf::Event::Closed:
                window.close();
                break;

                case sf::Event::KeyPressed:
                    switch(sf::Keyboard::isKeyPressed(key))
                    {

                        case sf::Keyboard::Left:

                        ball.moveCircle(-50, 0);
                        break;

                        case sf::Keyboard::Right:

                        ball.moveCircle(50, 0);
                        break;

                        case sf::Keyboard::Up:

                        ball.moveCircle(0, 50);
                        break;

                        case sf::Keyboard::Down:

                        ball.moveCircle(0, -50);
                        break;

                        default:
                        break;
                    }
                    break;

                default:
                break;
                }

            }
        window.clear(sf::Color::Black);

        window.draw(ball.getCircle());

        window.display();
        }
        return 0;

}


Ball::Ball(int CircleR, int Redd, int Greenn, int Bluee)
{
    CircleR = CircleR;
    Redd = Redd;
    Greenn = Greenn;
    Bluee = Bluee;

    shape.setRadius(CircleR);
    shape.setFillColor(sf::Color(Redd,Greenn,Bluee));
    shape.setPosition(100,100);
}

Ball::Ball()
{
    shape.setRadius(50);
    shape.setFillColor(sf::Color(100,100,100));
    shape.setPosition(100,100);
}

sf::CircleShape Ball::getCircle()
{
    return shape;
}

void Ball::moveCircle(int x, int y)
{
    getCircle().move(x, y);
}

 

J'ai mis Redd/Greenn/Bluee parce que je ne savais pas si il y aurait pu avoir une confusion avec les sf::Color (on ne sait jamais :p)
Merci d'avance
Titre: Re : classe balle
Posté par: G. le Août 14, 2013, 02:24:59 am
T'as mis tes clear draw display n'importe où. :/ (=en dehors de ta boucle principale)
Titre: Re : classe balle
Posté par: Engineer le Août 14, 2013, 11:53:13 am
Ah oui merci j'avais pas vu :p

EDIT: J'essaie de faire bouger la balle et je vois pas ou est le probleme, tout compile parfaitement
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>
#include <SFML/System.hpp>

sf::Event event;

class Ball
{
    int CircleR, Redd, Greenn, Bluee;
    sf::CircleShape shape;

    public:

    Ball(int CircleR,int Redd,int Greenn,int Bluee);
    Ball();
    sf::CircleShape getCircle();
    void moveCircle(int x, int y);

};

int main()
{
    Ball ball(100.f, 250, 0, 0);

    sf::RenderWindow window(sf::VideoMode(800,600), "SFML Test");
    while(window.isOpen())
    {
        while(window.pollEvent(event))
        {
            switch(event.type)
            {
                case sf::Event::Closed:
                window.close();
                break;

                default:
                break;
            }

        }

        if(sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
        {
            ball.moveCircle(-50,0);
        }
        if(sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
        {
            ball.moveCircle(50,0);
        }
        if(sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
        {
            ball.moveCircle(0,50);
        }
        if(sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
        {
            ball.moveCircle(0,-50);
        }
        window.clear(sf::Color::Black);

        window.draw(ball.getCircle());

        window.display();
    }
    return 0;

}


Ball::Ball(int CircleR, int Redd, int Greenn, int Bluee)
{
    CircleR = CircleR;
    Redd = Redd;
    Greenn = Greenn;
    Bluee = Bluee;

    shape.setRadius(CircleR);
    shape.setFillColor(sf::Color(Redd,Greenn,Bluee));
    shape.setPosition(100,100);
}

Ball::Ball()
{
    shape.setRadius(50);
    shape.setFillColor(sf::Color(100,100,100));
    shape.setPosition(100,100);
}

sf::CircleShape Ball::getCircle()
{
    return shape;
}

void Ball::moveCircle(int x, int y)
{
    getCircle().move(x, y);
}
 
Titre: Re : classe balle
Posté par: Laurent le Août 15, 2013, 09:18:30 am
Tu pourrais indiquer que tu as eu des réponses ici :
http://en.sfml-dev.org/forums/index.php?topic=12640.0

Histoire que les gens ne perdent pas leur temps à résoudre des problèmes qui ont déjà été résolus sur ton autre topic.

Note que tu ne gagneras pas grand chose à dupliquer tes questions sur les deux forums, le forum anglais est beaucoup plus actif.