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 - Platon

Pages: [1]
1
Général / Impossible de faire passer un this en argument
« le: Février 26, 2015, 06:05:05 pm »
Bonjour,

Je rencontre actuellement un problème bloquant dont je ne trouve pas la solution, le but qu'un objet puisse envoyer un this ( donc un pointer vers lui même ) à un autre objet ( via son constructeur ) en argument.

voici ce que j'ai essayé en version simplifié qui ne fait apparaitre que le code du problème :

UnitTower.h

class UnitTower
{
public:
UnitTower();
~UnitTower();
sf::Sprite getSprite();
void update();
void setTarget(UnitMobile);
UnitMobile getTarget();

protected:
UnitMobile cible;
sf::Texture texture;
sf::Sprite sprite;
};

Une fonction dans le UnitTower.cpp qui doit crée un objet et envoyer un pointer de lui même

void UnitTower::update(){ Shoot shoot(this) }
le constructeur de l'objet qui récupère l'autre

class Shoot
{
public:
Shoot(UnitTower*);
~Shoot();
void fire();

protected:
sf::Texture texture;
sf::Sprite sprite;
int dommage;
UnitTower* tower;
sf::Clock clock;
};

Et son Shoot.cpp

Shoot::Shoot(UnitTower* tOwer)
{
tower = tOwer;
}

Je vous remercie d'avance et je continue à chercher ;)

Cdlm,

Phobizeur

2
Général / Instabilité du programme (Crash random)
« le: Février 07, 2015, 10:38:08 pm »
Amis du soir, bonsoir !

Tout est dans le titre, je ne comprends pas pourquoi mon programme crash de façon aléatoire...

J'ai simplifié à l’extrême maximum pour trouver la faille mais le problème persiste.

Les symptômes : Tout peut bien marcher sans aucun soucis pendant 1/2 heure ou bien alors crash au bout de 2 minutes ou bien même au lancement.

Le code ( Méga simplifié, il est quasiment vide ) :

#include <SFML/Graphics.hpp>
#include <SFML\Network.hpp>
#include <iostream>
#include <sstream>
#include <string>
#include "TileMap.h"
#include "Connection.h"

sf::RectangleShape rect1, rect2;

sf::Vector2f prevPosition, p2Position;

bool update = false;

int main()
{

        rect1.setSize(sf::Vector2f(20, 20));
        rect2.setSize(sf::Vector2f(20, 20));

        rect1.setFillColor(sf::Color::Red);
        rect2.setFillColor(sf::Color::Blue);

        connection();

/*      sf::IpAddress ip = sf::IpAddress::getLocalAddress();
        sf::TcpSocket socket;
        char mode;

        std::cout << "Serveur : s | client : c" << std::endl;
        cin >> mode;

        if (mode == 's'){
                sf::TcpListener listener;
                listener.listen(2000);
                listener.accept(socket);
        }
        else{
                socket.connect(ip, 2000);
                mode = 'r';
        }*/


        sf::RenderWindow windows(sf::VideoMode(800, 600, 32), "Packets");

        std::cin.ignore();

        decoBdd(ligne);

        socket.setBlocking(false);

        windows.setVerticalSyncEnabled(true);

       

        while (windows.isOpen()){

                sf::Event event;

                sf::Packet packet;

                while (windows.pollEvent(event)){
                        if (event.type == sf::Event::Closed || event.key.code == sf::Keyboard::Escape)
                                windows.close();
                        else if (event.type == sf::Event::GainedFocus)
                                update = true;
                        else if (event.type == sf::Event::LostFocus)
                                update = false;

                }


                if (update){

                        prevPosition = rect1.getPosition();

                        if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
                                rect1.move(1, 0.0f);
                        else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
                                rect1.move(-1, 0.0f);
                        else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
                                rect1.move(0.0f, -1);
                        else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
                                rect1.move(0.0f, 1);

                        if (prevPosition != rect1.getPosition()){
                                if (packet << rect1.getPosition().x << rect1.getPosition().y){
                                        std::cout << "Envoyé :" << rect1.getPosition().x << "  |  " << rect1.getPosition().y << std::endl;
                                        socket.send(packet);
                                }
                               
                        }
                }

                socket.receive(packet);
                if (packet >> p2Position.x >> p2Position.y){
                        rect2.setPosition(p2Position);
                        std::cout << "Reçu :" << p2Position.x << "  |  " << p2Position.y << std::endl;
                }
       

        windows.draw(rect1);
        windows.draw(rect2);

        windows.display();
        windows.clear();

}

return 0;

}


Merci de votre attention !

3
Réseau / [SFML][RESEAU] Impossible d'envoyer un paquet
« le: Janvier 11, 2015, 06:09:54 pm »
Amis du soir, bonsoir !

Je viens vous demander de l'aide pour tenter de me débloquer sur un problème dont je ne vois pas l'origine.

Concrètement, je ne comprend pas pourquoi mon programme arrive à lancer et recevoir un premier paquet mais ensuite il refuse catégoriquement d'en envoyer d'autres...

Voici donc mon programme en 2 parties :

Connection.h

#include <SFML/Graphics.hpp>
#include <SFML\Network.hpp>
#include <iostream>
#include <sstream>
 
sf::TcpSocket socket;
sf::IpAddress ip = sf::IpAddress::getPublicAddress();
sf::TcpListener listenner;
 
sf::Packet packet;
 
sf::Http http("---ADRESSE DE MON SERVEUR---");
sf::Http::Request request;
sf::Http::Response response;
std::ostringstream stream;
sf::Socket::Status status;
 
char choix, mode = 'n';
char buf[2000];
std::string text,textRep;
std::string repServ, ligne;
 
void connection(){
 
    request.setMethod(sf::Http::Request::Post);
 
    std::cout << "Votre ip : " << ip << std::endl;
 
    std::cout << "Etre le Serveur : s | Etre le Client : c" << std::endl;
    std::cin >> choix;
 
    if (choix == 'c'){
 
        mode = 's';
 
        std::cout << "Vous etes un Client" << std::endl;
 
        std::cout << "CONNEXION EN COURS..." << std::endl;
 
        request.setUri("/index.php");
        response = http.sendRequest(request);
 
        repServ = response.getBody();
        std::istringstream lin(repServ);
 
        std::cout << "RECHERCHE DE SERVEUR EN COURS..." << std::endl;
 
        std::getline(lin, ligne);
        status = socket.connect(ligne, 2000);
 
        while (status != sf::Socket::Done){
             
            std::getline(lin, ligne);
            if (ligne == ""){
                std::cout << "Aucun serveur disponible" << std::endl;
                break;
            }
 
 
            status = socket.connect(ligne, 2000);
             
        }
 
        text = "Connection avec le client reussi !";
        packet << text;
 
    }
    else if (choix == 's'){
 
        mode = 'r';
 
        std::cout << "Vous etes le serveur" << std::endl;
         
        request.setUri("/addServ.php");
         
        stream << "ip=" << ip;
        request.setBody(stream.str());
        response = http.sendRequest(request);
        std::cout << "RECHERCHE D'UN CLIENT EN COURS..." << std::endl;
        listenner.listen(2000);
        listenner.accept(socket);
        std::cout << "SOCKET ACCEPTE" << std::endl;
 
        text = "CECI EST ENVOYE DEPUIS LE SERVEUR";
        packet << text;
    }
    else{
        std::cout << "OKTAMER" << std::endl;
         
    }
 
}
 
void decoBdd(std::string ipp){
 
    request.setUri("/delServ.php");
    response = http.sendRequest(request);
 
}
 


Source.cpp



#include <SFML/Graphics.hpp>
#include <SFML\Network.hpp>
#include <iostream>
#include <sstream>
#include <string>
#include "TileMap.h"
#include "Connection.h"
 
//sf::RenderWindow window(sf::VideoMode(800, 600), "Test MAP !");
 
//TileMap map;
 
int main()
{
     
    /*const int maap[] =
    {
        154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
        154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
        154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
        160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
        170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
        154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
        154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154
    };
 
    map.load("tiles.png", sf::Vector2u(32, 32), maap, 22, 7);
 
    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                window.close();
        }
 
        window.clear();
        window.draw(map);
        window.display();
    }*/

 
    connection();
 
    socket.send(packet);
    socket.receive(packet);
    packet >> textRep;
    std::cout << textRep << std::endl;
 
    std::cin.ignore();
 
    decoBdd(ligne);
 
    std::cout << "--<§> TCHAT TEST <§>--" << std::endl;
    std::cout << "Envoyer '-1' pour quitter le Tchat" << std::endl;
 
    while (text != "-1"){
 
        text="";
        textRep="";
        sf::Packet packet2;
 
        if (mode == 's'){
 
            std::cout << "VOTRE TEXT : " << std::endl;
            std::getline(std::cin, text);
             
            packet2 << text;
 
                if (socket.send(packet2)){
                    mode = 'r';
                }
                else{ std::cout << "ERREUR DANS L'envoie" << std::endl; }
 
        }
        else if (mode == 'r'){
 
            socket.receive(packet2);
            std::cout << "A" << std::endl;
 
            if (packet2 >> textRep){
 
                std::cout << "B" << std::endl;
                std::cout << textRep << std::endl;
                std::cout << "C" << std::endl;
                mode = 's';
 
            }
            else{ std::cout << "ERREUR DANS LA RECEPTION" << std::endl; }
             
        }
        else{
            return 0;
        }
 
        std::cout << "---------------" << std::endl;        
 
    }
 
    std::cout << "CONNEXION TERMINEE" << std::endl;
 
    system("pause");
 
    return 0;
}
 

Merci infiniment d'avance !

Cdlm,

Pages: [1]
anything