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

Auteur Sujet: classe balle  (Lu 2400 fois)

0 Membres et 1 Invité sur ce sujet

Engineer

  • Jr. Member
  • **
  • Messages: 55
    • Voir le profil
classe balle
« 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
« Modifié: Août 14, 2013, 02:11:11 pm par Engineer »

G.

  • Hero Member
  • *****
  • Messages: 1593
    • Voir le profil
Re : classe balle
« Réponse #1 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)

Engineer

  • Jr. Member
  • **
  • Messages: 55
    • Voir le profil
Re : classe balle
« Réponse #2 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);
}
 
« Modifié: Août 14, 2013, 02:17:19 pm par Engineer »

Laurent

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