Bienvenue, Invité. Merci de vous connecter ou de vous inscrire. Avez-vous oublié d'activer ?

Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Messages - arka

Pages: [1]
1
Général / Erreur de compilation
« le: Juillet 26, 2017, 05:06:30 pm »
Salut tous le monde,

J'ai téléchargé la sfml hier et j'essaye d'apprendre à l'utiliser.

Pour l'instant le programme que je fais est juste censé servir à déplacer un objet avec un click, avec des touches du clavier ou en glissant la souris.

Je suis un débutant en ce qui en est de la programmation donc mon code est très loin d'être parfait et j'en suis conscient.

Le code en question:

#pragma region include
        #include <SFML/Graphics.hpp>
        #include <iostream>
        #include <string>
        #include <cstdlib>
#pragma endregion include


sf::RenderWindow fenetre(sf::RenderWindow*);
sf::RectangleShape rectDraw(sf::RectangleShape*);
sf::CircleShape cercleDraw(sf::CircleShape*);
void CentreCercle(sf::CircleShape *cercle, int*, int*);
void fermetureFenetre();

void main()
{
        #pragma region variables
        sf::RenderWindow window;
        fenetre(&window);

        sf::RectangleShape rect;
        rect = rectDraw(&rect);;

        sf::CircleShape cercle;
        cercle = cercleDraw(&cercle);

        int xCentreCercle;
        int yCentreCercle;
        CentreCercle(&cercle, &xCentreCercle, &yCentreCercle);

        float speed = 1;

        sf::Vector2i positionSouris;
        #pragma endregion variables
       
        while(window.isOpen())
        {
        #pragma region fenOpen
                sf::Event event;               
                while(window.pollEvent(event))
                {
                        if(event.type == sf::Event::Closed)
                                window.close();
                }
        #pragma endregion fenOpen

        #pragma region KeyboardRectangle
        if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
                rect.move(0, -speed);
        else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
                rect.move(0, speed);
        else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
                rect.move(-speed, 0);
        else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right))      
                rect.move(speed, 0);
        #pragma endregion KeyboardRectangle

        #pragma region KeyboardCercle
        if (sf::Keyboard::isKeyPressed(sf::Keyboard::Z))
                cercle.move(0, -speed);
        else if (sf::Keyboard::isKeyPressed(sf::Keyboard::S))
                cercle.move(0, speed);
        else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Q))
                cercle.move(-speed, 0);
        else if (sf::Keyboard::isKeyPressed(sf::Keyboard::D))
                cercle.move(speed, 0);
        #pragma endregion KeyboardCercle

        #pragma region MouseCercle
                if(sf::Mouse::isButtonPressed(sf::Mouse::Left))
                {
                        bool boucle = true;
                        sf::Vector2f position = cercle.getPosition();
                        xCentreCercle = cercle.getPosition().x + cercle.getRadius();
                        yCentreCercle = cercle.getPosition().y+ cercle.getRadius();

                        float rayon = cercle.getRadius();
       
                        positionSouris = sf::Mouse::getPosition(window);
                        int xSouris = positionSouris.x;
                        int ySouris = positionSouris.y;

                        float resultat = (xCentreCercle-xSouris)*(xCentreCercle-xSouris)+(yCentreCercle-ySouris)*(yCentreCercle-ySouris);
               
                       

                        if(sqrt(resultat)<= rayon)
                        {
                                int diffX;
                                int diffY;             

                                diffX = xSouris-cercle.getPosition().x;
                                diffY = ySouris-cercle.getPosition().y;

                                while(boucle == true)
                                {
                                        positionSouris = sf::Mouse::getPosition(window);
                                        xSouris = positionSouris.x;
                                        ySouris = positionSouris.y;

                                       
                                        cercle.setPosition(xSouris - diffX, ySouris - diffY);

                                        window.draw(rect);
                                        window.draw(cercle);
                                        window.display();
                                        window.clear();

                                        if (sf::Mouse::isButtonPressed(sf::Mouse::Left) == false)
                                                boucle = false;
                                }
                        }
                }
                if(sf::Mouse::isButtonPressed(sf::Mouse::Right) && sf::Keyboard::isKeyPressed(sf::Keyboard::C))
                {
                        positionSouris = sf::Mouse::getPosition(window);
                        int xSouris = positionSouris.x;
                        int ySouris = positionSouris.y;
                        cercle.setPosition(xSouris, ySouris);
                }
                #pragma endregion MouseCercle

        #pragma region Mouserectangle
        if(sf::Mouse::isButtonPressed(sf::Mouse::Left))
        {
                bool boucle = true;
                sf::Vector2f position = rect.getPosition();
                sf::Vector2f taille = rect.getSize();

                int xMax = position.x + taille.x;
                int xMin = position.x;
                int yMax = position.y + taille.y;
                int yMin = position.y;
               
                positionSouris = sf::Mouse::getPosition(window);
                int xSouris = positionSouris.x;
                int ySouris = positionSouris.y;

                if(xSouris > xMin && xSouris < xMax && ySouris > yMin && ySouris < yMax)
                {
                        int diffX;
                        int diffY;

                        diffX = xSouris-xMin;
                        diffY = ySouris-yMin;

                        while(boucle == true)
                        {
                                positionSouris = sf::Mouse::getPosition(window);
                                xSouris = positionSouris.x;
                                ySouris = positionSouris.y;

                                rect.setPosition(xSouris - diffX, ySouris - diffY);
                                window.draw(rect);
                                window.draw(cercle);
                                window.display();
                                window.clear();

                                if (sf::Mouse::isButtonPressed(sf::Mouse::Left) == false)
                                        boucle = false;
                        }
                }
        }
        if(sf::Mouse::isButtonPressed(sf::Mouse::Right)&& sf::Keyboard::isKeyPressed(sf::Keyboard::R))
        {
                positionSouris = sf::Mouse::getPosition(window);
                int xSouris = positionSouris.x;
                int ySouris = positionSouris.y;
                rect.setPosition(xSouris, ySouris);
        }
        #pragma endregion MouseRectangle
       
                window.draw(rect);
                window.draw(cercle);
                window.display();
                window.clear();
        }
}

void fenetre(sf::RenderWindow &window)
{
        window.create(sf::VideoMode(800,600),"Tuto SFML");
        window.setPosition(sf::Vector2i(50,50));
        window.setFramerateLimit(60);
}

void fermetureFenetre(sf::RenderWindow &window)
{
                sf::Event event;               
                while(window.pollEvent(event))
                {
                        if(event.type == sf::Event::Closed)
                                window.close();
                }
}

sf::RectangleShape rectDraw(sf::RectangleShape &rect)
{
        rect.setSize(sf::Vector2f(200, 100));
        rect.setPosition(10, 10);
        rect.setFillColor(sf::Color(250, 100, 150));
       
        return rect;
}

sf::CircleShape cercleDraw(sf::CircleShape &cercle)
{
        cercle.setFillColor(sf::Color(100,250,50));
        cercle.setRadius(50);
        cercle.setPosition(0, 0);
}

void CentreCercle(sf::CircleShape &cercle, int &xCentreCercle, int &yCentreCercle)
{
        xCentreCercle = cercle.getPosition().x + cercle.getRadius();
        yCentreCercle = cercle.getPosition().y+ cercle.getRadius();
}
 

A la base tout mon code était dans la fonction main et fonctionnait parfaitement, ensuite j'ai voulu commencer à l'améliorer en utilisant des sous programme (ou je ne sais pas comment vous l’appelez ^^)(et une fois cela maîtrisé je m'essaierais aux classes)  mais maintenant j'ai les 2 erreur suivantes :



Je pense que c'est lié aux RenderWindows mais je n'arrive pas à régler mon problème.

Merci d'avance pour votre aide et bonne journée :)

Pages: [1]