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.


Sujets - Slash94

Pages: « Précédente 1 [2]
16
Salut à tous,

J'essaie, en vain, de faire en sorte que lorsque je clique sur le bouton gauche de ma souris, un projectile Circleshape se crée dans un vector qui contient l'angle du tireur ( donc le tireur étant mon "personnage" qui est une flèche rouge qui pointe en fonction de la position de ma souris ).

Ensuite, j'essaie de faire en sorte que le projectile s'oriente en direction de là où j'ai cliqué..

Les positions de mes projectiles sont assez incohérentes et j'aimerais avoir un coup de main afin de mettre en oeuvre un système fonctionnel..

Ici mon code, en vous remerciant GRANDEMENT d'avance :

#include <SFML/Graphics.hpp>

#include <iostream>
#include <math.h>
#include <vector>

using namespace std;
using namespace sf;

int main()
{
    RenderWindow win(VideoMode(800,600),"SFML Rotation Test", Style::Titlebar);
    win.setFramerateLimit(60);

    Vector2f triPosition(20,20);
    Vector2f mousePosition;
    Vector2f diff;
    float angle = 0;

    CircleShape triangle(15,3);
    triangle.setPosition(triPosition);
    triangle.setFillColor(Color::Red);
    triangle.setOrigin(10,10);

    vector<CircleShape>bullet;

    Clock clock;

    while (win.isOpen())
    {
        triPosition.x = triangle.getPosition().x;
        triPosition.y = triangle.getPosition().y;

        mousePosition.x = Mouse::getPosition(win).x;
        mousePosition.y = Mouse::getPosition(win).y;

        diff.x = triPosition.x - mousePosition.x;
        diff.y = triPosition.y - mousePosition.y;

        Event event;
        while (win.pollEvent(event))
        {
            switch (event.type)
            {
            case Event::Closed:
                win.close();
                break;
            }
        }

        if (Keyboard::isKeyPressed(Keyboard::Z))
            triPosition.y -= 2;
        if (Keyboard::isKeyPressed(Keyboard::S))
            triPosition.y += 2;
        if (Keyboard::isKeyPressed(Keyboard::Q))
            triPosition.x -= 2;
        if (Keyboard::isKeyPressed(Keyboard::D))
            triPosition.x += 2;

        if (Mouse::isButtonPressed(Mouse::Left) & clock.getElapsedTime().asMilliseconds()>200)
        {
            CircleShape bul(15,3);
            bul.setOrigin(10,10);
            bul.setFillColor(Color::Green);
            bul.setPosition(triPosition.x, triPosition.y);
            float tAngle = atan2(bul.getPosition().y - mousePosition.y,
                                 bul.getPosition().x - mousePosition.x) * 180 / 3.14159265359;
            bul.setRotation(tAngle);
            bullet.push_back(bul);
            clock.restart();
        }

        if (Keyboard::isKeyPressed(Keyboard::Escape))
            win.close();

        angle = atan2(diff.y, diff. x) * 180 / 3.14159265359;
        cout << " angle : " << angle << endl;

        triangle.setRotation(angle+45);
        triangle.setPosition(triPosition.x, triPosition.y);

        win.clear();

        if (bullet.size()>0)
        {
            cout << "Bullet Size : " << bullet.size() << endl;
            for (int i = 0 ; i < bullet.size() ; i++)
            {
                float angBul = bullet[i].getRotation() * 180 / 3.14 ;
                    bullet[i].move(cos(angBul) * 4, -sin(angBul) * 4);
                win.draw(bullet[i]);

                if (bullet[i].getPosition().x < 0 || bullet[i].getPosition().x > 800 ||
                    bullet[i].getPosition().y < 0 || bullet[i].getPosition().y > 600)
                {
                    bullet.erase(bullet.begin()+i);
                }
            }
        }

        win.draw(triangle);

        win.draw(triangle);
        win.display();
    }
}
 

17
Salut à tous, je viens de lancer une chaîne youtube dans la quelle je vais poster très régulièrement des cours basiques sur la SFML ( en majeure partie du moins ), plusieurs tutos par semaine verront le jour au fur et à mesure, je vous laisse le lien :

https://www.youtube.com/channel/UC8WegJulE6Zb9aMecakbBWg

En espérant de tout cœur apporter ma contribution à l'apprentissage de certains d'entre vous :-]

( PS : Je poste ici car la section générale est totalement dead..)

@Bientôt !  :)

18
Réseau / Créer des RectangleShape en fonction du nombre de clients..
« le: Janvier 22, 2017, 09:00:48 pm »
Salut à tous,

Alors voilà, je suis confronté à un problème, je n'arrive pas, depuis des heures, à mettre en oeuvre un système ou chaque nouveau client connecté créerait un RectangleShape supplémentaire sur chaque fenêtre de chaque client, ensuite j'aimerais que leurs déplacements soient perçus, évidemment, par tous les clients.

Voici mon code du serveur qui renvoi aux autres clients l'ID de chaque client ( vector d'int ), le pseudo ( vector de string ) et sa position en X.

#include <iostream>
#include <vector>

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

using namespace std;
using namespace sf;

int main()
{

    bool done = false;

    TcpListener listener;
    SocketSelector selector;
    vector<TcpSocket*>clients;
    vector<string>pseudos;
    vector<int>idNumber;
    int port = 2000;

    listener.listen(port);
    selector.add(listener);

        while (!done)
        {
            if (selector.wait())
            {
                if (selector.isReady(listener))
                {
                    TcpSocket *socket = new TcpSocket;
                    listener.accept(*socket);
                    Packet packet, sendPacket;
                    string id;
                    if (socket->receive(packet) == Socket::Done)
                         packet >> id;
                    cout << id << " vient de se connecter. " << endl;
                    clients.push_back(socket);
                    pseudos.push_back(id);
                    idNumber.push_back(clients.size());
                    selector.add(*socket);

                } else {
                    for (int i = 0 ; i < clients.size(); i++)
                    {
                        if (selector.isReady(*clients[i]))
                        {
                            Packet packet, sendPacket;
                            if (clients[i]->receive(packet) == Socket::Done)
                            {
                                int x;
                                packet >> x;
                                string pseudo = pseudos[i];
                                cout << x << " recu de " << pseudo << endl;
                                sendPacket << x << pseudo << idNumber[i] << clients.size();

                                for (int j = 0 ; j < clients.size() ; j++)
                                {
                                   if (i!=j)
                                    {
                                        clients[j]->send(sendPacket);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }

 

Et voici mon client, qui est sensé créer un RectangleShape à chaque connexion d'un nouveau client, mais lorsque je lance un autre client, mon programme plante, je présume qu'il s'agirait d'un dépassement de vecteur, mais je suis paumé, je ne sais plus trop où me donner la tête ( et puis l'énervement qui va avec n'arrange rien !)

Merci à vous de bien pouvoir m'éclairer afin de parvenir à réussir à gerer plusieurs RectangleShape de plusieurs clients simultanément sans crash...

#include <iostream>
#include <vector>

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

using namespace std;
using namespace sf;

int main()
{
    int WIDTH = 800, HEIGHT = 600;
    RenderWindow app(VideoMode(WIDTH, HEIGHT, 32),"SFML Client Game", Style::Titlebar);
    app.setFramerateLimit(60);

    RectangleShape internBox(Vector2f(50,50));
    internBox.setFillColor(Color::Red);

    string ip = "192.168.0.25";
    int port = 2000;
    TcpSocket socket;

    socket.connect(ip, port);

    vector<RectangleShape*>players;

    socket.setBlocking(false);

    string id;
    cin >> id;

    Packet sendPacket;

    sendPacket << id;
    socket.send(sendPacket);

    int x = 0, y = 0;

    int xrecu = 0;
    string pseudo;
    int idNumber = 0;
    int localCheck = 1;
    int nbrClients = 0;

    while(app.isOpen())
    {
        Event event;
        while (app.pollEvent(event))
        {
            switch (event.type)
            {
            case Event::Closed:
                    app.close();
                break;
            case Event::KeyPressed:
                if (event.key.code == Keyboard::Escape)
                    app.close();
                break;
            }
        }

    Packet sendPacket;

    if (app.hasFocus())
    {
            if (Keyboard::isKeyPressed(Keyboard::Right))
        {
            x++;
            sendPacket << x;
            socket.send(sendPacket);
        }

            if (Keyboard::isKeyPressed(Keyboard::Left))
        {
            x--;
            sendPacket << x;
            socket.send(sendPacket);
        }
    }

    Packet packet;
    socket.receive(packet);


    if (packet >> xrecu >> pseudo >> idNumber >> nbrClients)
    {
        if (localCheck < nbrClients-1)
        {
            RectangleShape *box = new RectangleShape();
            box->setFillColor(Color::Red);
            box->setSize(Vector2f(50,50));
            players.push_back(box);
            localCheck+=1;
        }

        players[idNumber]->setPosition(xrecu,0);

        cout << "Vector players : " << players.size() << endl;
        cout << "Le serveur a " << nbrClients << " clients." << endl;
        cout << "La variable localCheck est a " << localCheck << endl;
        cout << "" << endl;
        cout << pseudo << " a son X a " << xrecu << " son idNumber est le " << idNumber << endl;
    }

    internBox.setPosition(Vector2f(x, internBox.getPosition().y));

    app.clear();

    for ( int i = 0 ; i < players.size() ; i++)
    {
        app.draw(*players[i]);
    }

    app.draw(internBox);

    app.display();

    }
}
 

Merci à vous !

19
Salut à tous,

Alors voilà, j'ai développé une petite application permettant que 2 personnes puissent, depuis leur PC, déplacer un personnage animé avec les touches fléchées.

Le programme fonctionne parfaitement bien en local ou même en wifi avec mon PC de bureau - PC portable, avec l'ip de la box 168.0.0.25 ..

Néanmoins, après avoir renseigné mon adresse IP fixe pour que la connexion se fasse depuis l'extérieur, il ne se passe rien..

Lorsque j'envoi mon programme à un pote par email et que je lui demande de se connecter, il ne se passe rien, pourtant, j'ai ouvert le port que j'utilise ( 2000 ) depuis ma box SFR, mais impossible pour mon pote de se connecter lorsque je lance le serveur..

Merci à tous de bien vouloir m'éclairer sur ce problème.

Voici le code, sait-on jamais :

#include <iostream>

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

using namespace std;
using namespace sf;

int main()
{
    string ip = "85.***.**.**2";
    TcpSocket socket;

    cout << ip << endl;

    char connectionType;
    bool updateScreen;

        cout << "(s) pour serveur /  (c) pour client : ";
        cin >> connectionType;

    if (connectionType == 's')
    {
        TcpListener listener;
        listener.listen(2000);
        listener.accept(socket);
    }

    if (connectionType == 'c')
    {
        socket.connect(ip, 2000);
    }

    RenderWindow app(VideoMode(800,600,32),"SFML_Packets");

    Clock clock;

    Texture perso;
    perso.loadFromFile("mario.png");
    Sprite S1(perso), S2(perso);
    Vector2f prevPosition, p2Position;

    Vector2f position(800/2, 600/2);

    Vector2f anim, p2Anim;
    enum dir {up, right, down, left };
    enum p2Dir {up2, right2, down2, left2 };

    S1.setTextureRect(IntRect(anim.x*24, anim.y*32, 24, 32));
    S2.setTextureRect(IntRect(anim.x*24, anim.y*32, 24, 32));

    anim.x = 0;
    anim.y = down;

    p2Anim.x = 0;
    p2Anim.y = down2;

    float speed = 3;

    View view;

    socket.setBlocking(false);

    while (app.isOpen())
    {
        Event event;
        while (app.pollEvent(event))
        {
            if (event.type == Event::Closed)
                app.close();
            if (event.type == Event::GainedFocus)
                updateScreen = true;
            if (event.type == Event::LostFocus)
                updateScreen = false;
        }

        prevPosition = S1.getPosition();
        position.x = S1.getPosition().x + 12 - (800/2);
        position.y = S1.getPosition().y + 16 - (600/2);

        if (updateScreen)
        {
            if (Keyboard::isKeyPressed(Keyboard::Up) && clock.getElapsedTime().asMilliseconds()>100)
            {
                S1.move(0, -speed);
                anim.y = up;
                anim.x++;
                if (anim.x>2)
                    anim.x = 0;
                clock.restart();
            }
            if (Keyboard::isKeyPressed(Keyboard::Down) && clock.getElapsedTime().asMilliseconds()>100)
            {
                S1.move(0, speed);
                anim.y = down;
                anim.x++;
                if (anim.x>2)
                    anim.x = 0;
                clock.restart();
            }
            if (Keyboard::isKeyPressed(Keyboard::Left) && clock.getElapsedTime().asMilliseconds()>100)
            {
                S1.move(-speed, 0);
                anim.y = left;
                anim.x++;
                if (anim.x>2)
                    anim.x = 0;
                clock.restart();
            }
            if (Keyboard::isKeyPressed(Keyboard::Right) && clock.getElapsedTime().asMilliseconds()>100)
            {
                S1.move(speed, 0);
                anim.y = right;
                anim.x++;
                if (anim.x>2)
                    anim.x = 0;
                clock.restart();
            }

            if(Keyboard::isKeyPressed(Keyboard::Escape))
                app.close();

                S1.setTextureRect(IntRect(anim.x*24, anim.y*32, 24, 32));
        }

        Packet packet;

        if (prevPosition != S1.getPosition())
        {
            packet << S1.getPosition().x << S1.getPosition().y << anim.x << anim.y;
            socket.send(packet);
        }

        socket.receive(packet);

        if (packet >> p2Position.x >> p2Position.y >> p2Anim.x >> p2Anim.y )
        {
            S2.setPosition(p2Position);
            S2.setTextureRect(IntRect(p2Anim.x*24, p2Anim.y*32, 24, 32));
        }

        app.clear();

        view.reset(FloatRect(position.x, position.y, 800, 600));

        app.setView(view);

        app.draw(S1);
        app.draw(S2);

        app.display();
    }
}
 

20
Général / Triangles is not a type..?
« le: Janvier 02, 2017, 02:38:19 pm »
Salut à tous !

Cette fois-ci, je viens vous voir car je suis confronté à un problème bizarre, lorsque je crée un VertexArray dans mon main, il n'y a aucun problème, néanmoins, lorsque je décide de le déclarer dans le header d'une autre classe, j'ai l'erreur suivante :

'sf::Triangles' is not a type

Voici le code en question :

#ifndef PLANE_H_INCLUDED
#define PLANE_H_INCLUDED

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

class Plane{

protected:
    sf::VertexArray plane(sf::Triangles, 3);

public:
    Plane();
};

#endif // PLANE_H_INCLUDED
 

Merci à vous :-)

21
Salut à tous,

Je m'intéresse à la saisie clavier avec la SFML, mais lorsque je fais appel à l'événement concerné, tout ce que je récolte est la fermeture de ma fenêtre ..  >:(
Pourtant, sur des tutoriaux vus sur youtube, les types ont exactement placé le même code que moi et pourtant, lorsqu'ils saisissent des touches clavier, celles-ci s'écrivent sur la console..

Merci de bien vouloir m'éclaircir sur ce problème curieux :-)

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

#include <iostream>
#include <string>

using namespace std;
using namespace sf;

int main()
{

    int WIDTH = 800, HEIGHT = 600;

    RenderWindow app(VideoMode(WIDTH, HEIGHT, 32),"SFML Text Entered", Style::Titlebar);

    while (app.isOpen())
    {
        Event event;
        while (app.pollEvent(event))
        {
            switch(event.type){
            case Event::Closed:
                app.close();
                break;
            case Event::KeyPressed:
                if (Keyboard::Escape)
                app.close();
                break;
            case Event::TextEntered:
                cout << event.text.unicode;
                break;
            }
        }

        app.display();

    }
}
 

22
Salut à tous,

Je bute sur un problème qui m'embête franchement depuis hier soir, alors voilà, j'ai une classe EventGestion qui contient une méthode ecouteSouris(RenderWindow &app)

Dans mon main, lorsque j'invoque cette méthode en lui passant la fenêtre de mon programme en argument, tout va bien mais... mon événement compris dans ma méthode ecouteSouris ( MD qui est donc une instance de ma classe MapDisplay que j'ai déclaré dans mon EventGestion.h ) semble ne pas prendre ce paramètre fenêtre en compte :

    void EventGestion::ecouteSouris(RenderWindow &app)
    {
        if (Mouse::isButtonPressed(Mouse::Left))
        {
            MD.ajouterBloc(app);
        }
    }

La méthode ajouterBloc(RenderWindow &app) de ma classe MapDisplay :

    void MapDisplay::ajouterBloc(RenderWindow &app)
    {
        position.x = Mouse::getPosition(app).x;
        position.y = Mouse::getPosition(app).y;
}

Lorsque je souhaite récupérer la position de ma souris avec des getters dans la boucle de mon Main, les coordonnées x et y restent à 0 comme si la fenêtre que j'ai tenté de passer en argument par l'intermédiaire de "ecouteSouris" n'était au final pas passée..

Merci [ Laurent ] & les autres de votre aide :-)

23
Salut à tous.
D'après-vous, comment pourrais-je m'y prendre afin d'avoir un cube qui suivrait la souris tous les 50 pixels ?
( Comme dans un éditeur de maps par exemple ), je voudrais que si mon cube est entre 0 et 50 qu'il soit en position X à 0, si il est entre 50 et 100, en position X à 50 etc... ? Pas de déplacement " fluide " quoi.

Des idées ? Merci à vous :-)

24
Général / Font et Text freeze mon programme...
« le: Décembre 23, 2016, 09:50:11 pm »
Bonsoir à tous,

J'ai réussi à coder un pong perso comme un grand qui est fonctionnel !
Néanmoins, lorsque je charge un Font avec loadFromFile ou bien quand j'utilise texte.setString mon programme freeze.. C'est à dire que lorsque j'appui sur espace, le jeu est censé se lancer car la variable "gameLaunch" booléenne ( accessible avec getGameState() ) passe à " true ", cela fonctionne parfaitement MAIS dés que je veux afficher du texte ou charger un font ( pour afficher les scores du coup ), quand j'appuie sur Espace au début du jeu, getGameState() renvoi 0 et si je reste appuyé sur espace je reçois plein de 00000 ( testé avec un cout ), pourquoi ne veut-elle pas passer à 1 / true ?
J'ai remarqué que ce problème venait de Font ou bien de Text...

Voici mon main :

#include <iostream>
#include <sstream>

#include "player.h"
#include "computer.h"
#include "keygestion.h"
#include "ball.h"

#include <SFML/Graphics.hpp>

using namespace std;
using namespace sf;

template <class T>
string nbrConv(T Number)
{
    ostringstream ss;
    ss << Number;
    return ss.str();
}


int main()
{

RenderWindow app(VideoMode(800,600,32),"Pong V1.1", Style::Titlebar);

Font arial;
if (!arial.loadFromFile("arial.ttf"))
{
    cout << "Impossible de charger le font arial.ttf" << endl;
} else {

}

app.setFramerateLimit(60);

//creation de mon objet de gestion du clavier
Keygestion KG;

//creation de mes objets joueur, ordinateur et balle
Player plr(10,100,Color(255,255,255));
Computer cpt(10,100,Color(255,255,255));
Ball ball(7,Color(255,255,255));

//configuration des positions de départ
plr.setPos(10,app.getSize().y / 2 - 80);
cpt.setPos(780,app.getSize().y / 2 - 80);
ball.setPos(app.getSize().x/2, app.getSize().y / 2 - 80);

    while(app.isOpen())
    {
        if (Keyboard::isKeyPressed(Keyboard::Escape))
            app.close();
        Event event;
        while (app.pollEvent(event))
        {
            if (event.type == event.Closed)
                app.close();
        }

        app.clear();

        if (!plr.getGameState() && Keyboard::isKeyPressed(Keyboard::Space))
            plr.setGameState(true);

        if (plr.getGameState()){
        //gestion du joueur
        KG.ecouteClavier(plr);
        plr.boundGestion();

        //gestion de l'ordinateur
        ball.influenceComputer(cpt);

        //gestion de la balle
        ball.goBall();
        ball.verticalBoundGestion();
        ball.paddleBoundGestion(plr,cpt);
        ball.checkWinner(plr,cpt);

        cout << plr.getGameState() << endl;

        if (!plr.getGameState())
        {
            plr.setPos(10,app.getSize().y / 2 - 80);
            cpt.setPos(780,app.getSize().y / 2 - 80);
            ball.setPos(app.getSize().x/2, app.getSize().y / 2 - 80);
        }

        }


        //affichages des éléments
        plr.drawTo(app);
        ball.drawTo(app);
        cpt.drawTo(app);

        app.display();

    }

}

 

Merci à vous :-)

25
Général / Fermer ma fenêtre depuis une autre classe ?
« le: Décembre 20, 2016, 11:22:53 am »
Bonjour,

J'ai déclaré ma fenêtre "app" en Globale, autrement-dit avant mon int main(), de manière à y avoir accès partout dans le code.

Voici le code en question :

#include <iostream>
#include "KeyGestion.h"

#include <SFML/Graphics.hpp>

using namespace std;
using namespace sf;

#pragma region variables
RenderWindow app(VideoMode(800,600,32),"Test", Style::Titlebar);
KeyGestion K;
#pragma endregion variables

int main()
{
    while(app.isOpen())
    {
        Event event;
        while (app.pollEvent(event))
        {
            if (event.type == event.Closed)
                app.close();
        }
        K.KeyPress();
        app.display();
    }

}
 

Le problème, c'est que lorsque je veux accéder à ma fenêtre "app" pour la fermer depuis une autre classe, ici KeyGestion.CPP, au moment de vouloir appliquer un évènement clavier ( ici pour fermer la fenêtre ), cela ne reconnait pas "app" par l'erreur suivante : error : 'app' was not declared in this scope

Voici KeyGestion.CPP
#include "KeyGestion.h"

#include <SFML/Graphics.hpp>

using namespace std;
using namespace sf;

KeyGestion::KeyGestion()
{

}

KeyGestion::~KeyGestion()
{

}

void KeyGestion::KeyPress()
{
    if (Keyboard::isKeyPressed(Keyboard::Escape))
    {
       app.close();
    }
}

Le but étant de fermer ma fenêtre en pressant la touche ECHAP grâce à une classe spécifique pour la gestion des touches clavier... Merci encore à vous de bien vouloir m'éclairer :-)

26
Graphique / Balle qui rebondit contre les rebords...Galère !
« le: Décembre 15, 2016, 11:03:06 pm »
Bonsoir tout le monde  :)

Je viens vous voir car je suis un petit peu perdu sur un petit programme que j'essaie de concevoir, autrement-dit : une simple balle qui rebondirait contre les 4 rebords de la fenêtre..

J'ai tenté d'inverser les valeurs X et Y si ces coordonnées dépassaient la largeur ( width ) de l'écran ou bien la hauteur ( height ) avec des booleans pour modifier les calculs en conséquence, mais mon programme se comporte n'importe comment, la balle rebondit bien après avoir quitté l'écran et fait des mouvements bizarres, d'autant plus qu'avec les getPositionX et Y de ma balle, elle prend de plus en plus d'amplitude ( que ce soit dans les négatifs ou les positifs ) au fur & à mesure !

Pourquoi un tel comportement ?

C'est pour un programme en 800*600 donc j'ai mis les valeurs 770 et 570 / 30 et 30 car j'ai déduis la taille de la balle..

PS : Je trouve le code du tuto openclassroom trop lourd / bordélique et en plus, il est obsolète par rapport à la nouvelle version SFML.. j'aimerais vous m'aidiez à identifier le problème dans MON code.

Merci infiniment à vous les z'amis :D

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

#include "Ball.h"
#include "checkCollide.h"

using namespace std;
using namespace sf;

#pragma region variables
unsigned int SCREEN_WIDTH(800);
unsigned int SCREEN_HEIGHT(600);
RenderWindow app(VideoMode(SCREEN_WIDTH,SCREEN_HEIGHT,32),"Hey");
#pragma endregion variables

#pragma region fonctions
void gestionClavier();
#pragma endregion fonctions

int main()
{

    app.setFramerateLimit(30);

    Ball ball(Color::Red, 30);
    ball.setPosition(SCREEN_WIDTH/2-30, SCREEN_HEIGHT/2-30);

    while(app.isOpen())
    {
        Event E;

        while(app.pollEvent(E))
        {
            if(E.type == E.Closed)
                app.close();
        }

    gestionClavier();

    ball.moveBall();
    ball.checkCollide();

    cout << ball.getX() << endl;
    cout << ball.getY() << endl;

    system("cls");

    app.clear();
    app.draw(ball.getCircle());
    app.display();

    }

}

void gestionClavier()
{
        if (Keyboard::isKeyPressed(Keyboard::Escape))
        {
            app.close();
        }
}
 

Ball.h

#ifndef BALL_H_INCLUDED
#define BALL_H_INCLUDED

#include <SFML/Graphics.hpp>

class Ball{

protected:
    int m_taille = 0;
    int m_dX = 0;
    int m_dY = 0;
    int m_speed = 0;
    bool veX = false;
    bool veY = false;
    sf::CircleShape circle;

public:
    Ball();
    Ball(sf::Color c, int taille, int speed = 1);
    sf::CircleShape getCircle();
    sf::CircleShape setPosition(int x, int y);
    void moveBall();
    void checkCollide();
    int getX();
    int getY();
    ~Ball();

};

#endif
 

Ball.cpp

#include <iostream>

#include "Ball.h"

using namespace std;
using namespace sf;

Ball::Ball()
{

}

Ball::Ball(Color c, int taille, int speed) :
    m_taille(taille), m_speed(speed)
{
    circle.setFillColor(c);
    circle.setRadius(m_taille);
}

void Ball::moveBall()
{
    if (veX){
        m_dX += m_speed;
    }
    if (!veX){
        m_dX -= m_speed;
    }
    if (veY){
        m_dY += m_speed;
    }
    if (!veY){
        m_dY -= m_speed;
    }

    circle.move(m_dX, m_dY);
}

void Ball::checkCollide()
{
        if (circle.getPosition().x > 770)
    {
        veX = false;
    }
        if (circle.getPosition().x < 30)
    {
        veX = true;
    }
        if (circle.getPosition().y > 570)
    {
        veY = false;
    }
        if (circle.getPosition().y < 30)
    {
        veY = true;
    }
}

int Ball::getX()
{
    return circle.getPosition().x;
}

int Ball::getY()
{
    return circle.getPosition().y;
}

CircleShape Ball::getCircle()
{
    return circle;
}

CircleShape Ball::setPosition(int x, int y)
{
    circle.setPosition(x,y);
}

Ball::~Ball()
{

}
 

Et encore MERCI !  ;)

27
Général / Erreur lorsque je lance l'exécutable de mon projet..
« le: Décembre 10, 2016, 04:24:02 pm »
Salut à tous :-)

Je viens à vous car j'ai [enfin] réussi à installer correctement SFML sur Code::Blocks 16.1.
Lorsque je compile et lance mon programme depuis l'IDE ( le code source de l'exemple du site pour afficher un cercle vert ), il fonctionne nickel.

Par contre, dés que je tente de lancer l’exécutable dans le dossier de mon projet, j'ai droit à cette erreur :

http://image.noelshack.com/fichiers/2016/49/1481383039-screen.png

Lorsque je rajoute la DLL en question, il m'en demande une autre et ainsi de suite.... Donc comment pallier à ce problème de manière à ce que je puisse lancer mon exécutable sans problème ?

Merci à vous !

28
Général / Afficher les méthodes SFML lorsque je code..?
« le: Décembre 10, 2016, 09:37:46 am »
Bonjour à tous :-)

Je viens vous voir car j'aimerais savoir comment faire pour afficher les méthodes de SFML lorsque je code ... par exemple, si je commencer à taper sf::sle et bien je vois le mot "sleep" qui s'affiche et en appuyant sur ENTER il s'affiche entièrement tout seul..? Un peu comme avec la librairie SDL ou bien même si je tape un simple " co " et bien "cout" m'est proposé.. je crois m'être exprimé de manière suffisamment clair pour que vous compreniez ma demande :-)

En vous remerciant d'avance !

Pages: « Précédente 1 [2]