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

Pages: [1] 2 Suivante »
1
Réseau / Re: Paquet TCP incomplet
« le: Juin 01, 2019, 08:54:07 pm »
Effectivement c'était ça.

Et oui, je compte utiliser le multi-thread pour implémenter un système de multi-joueur avec le serveur qui gère le jeu dans un thread, et peut recevoir des commandes sans freeze à cause du "getline" dans un autre.

Je profite de ce poste pour rapidement poser une question hors-sujet: Aurais-tu des sites/forums pour rejoindre des projets en développement ?

2
Réseau / Paquet TCP incomplet
« le: Juin 01, 2019, 04:51:13 pm »
Bonjour,

Je me casse les dents sur un petit soucis, j'aimerais un simple programme serveur-client qui permet d'envoyer des messages, et afin de m'entraîner, j'utilise aussi le multi-threading c++11.

Seulement, voilà, pour je ne sais quel raison, les paquets reçus par le client sont incomplets (voir screen), après quelques recherches, je me rend compte que ça vient peut-être des paquets envoyés. Apparemment, lorsque que je fais
packet << cmd;
avec cmd qui est un string, le paquet ne contient pas tout le string contenu dans cmd.

Par le plus grand des hasards, quand je rajoute la ligne
std::cout << "Message original: " << cmd << std::endl;
juste avant, cela fonctionne, mais sans cette ligne, les messages reçus sont parfois incomplets, pourquoi?

Code du serveur émettant:

#include <SFML/Network.hpp>
#include <iostream>
#include <string>
#include <memory>
#include <vector>
#include <stdlib.h>
#include <thread>



void sendString(const std::string &msg, std::unique_ptr<sf::TcpSocket> &client)
{
    sf::Packet packet;
    packet << msg;
    client->send(packet);
    packet.clear();

}


void thread_function(std::string *cmd)
{
    while(*cmd != "close")
    {
        if(*cmd == "")
        {
            std::cout << "Entrez votre commande: ";
            getline(std::cin, *cmd);
        }
    }
}


int main()
{
    std::string cmd = ""; //Gere les commandes

    sf::TcpListener listener;
    std::vector<std::unique_ptr<sf::TcpSocket>> clients;

    int iClient = 0;

    sf::Socket::Status status;

    clients.push_back(std::unique_ptr<sf::TcpSocket>(new sf::TcpSocket()));
    listener.listen(53000);
    listener.accept(*clients[iClient]);
    std::cout << "Connexion " << iClient+1 << " reussie !" << std::endl;
    sendString("Connexion reussie !", clients[iClient]);

    listener.setBlocking(false);


    std::thread threadObj(thread_function, &cmd);//Thread gerant les commandes de son côté

    clients.push_back(std::unique_ptr<sf::TcpSocket>(new sf::TcpSocket()));
    iClient++;

    while(cmd != "close")
    {

        if(listener.accept(*clients[iClient]) == sf::Socket::Done)
        {
            clients.push_back(std::unique_ptr<sf::TcpSocket>(new sf::TcpSocket()));
            sendString("Connexion reussie !", clients[iClient]);
            iClient++;
            std::cout << "Connexion " << iClient << " reussi !"<< std::endl;
        }

        if(cmd != "")
        {
//            std::cout << "Message original: " << cmd << std::endl; // <------ Ligne qui résout le soucis

            for(int i = 0; i < clients.size()-1; i++)
            {
                sf::Packet packet;
                packet << cmd;
                status = clients[i]->send(packet);
            }
            cmd = "";
        }

    }




    for(int i = 0; i < clients.size()-1; i++)
        sendString("Connexion over", clients[i]);

    threadObj.join(); //Attend que l'autre thread est fini avant de fermer le programme
    return 0;
}


 

Code du client recevant:

int main(){
    sf::TcpSocket socket;
    socket.connect("127.0.0.1", 53000);
    std::string msgrecu;


    while(msgrecu != "over")
    {
        sf::Packet packet;
        if(socket.receive(packet) == sf::Socket::Done)
        {
            packet >> msgrecu;
            std::cout << packet.getDataSize() << " : " << msgrecu << std::endl;
            packet.clear();

        }

    }

}

Merci bien de m'avoir lu, en espérant que j'ai été clair,

Bonne journée


3
Pardon, au temps pour moi j'avais mal compris

4
Oui, le problème disparaît quand l'antialiasing n'est pas mis.

Après un autre test, je découvre que le setSmooth(true) a plus ou moins le même soucis

Le code utilisé:
(click to show/hide)





5
Je ne sais pas si je peux fournir d'autres informations pour trouver l'origine du problème, hésite pas à me dire si je dois te fournir d'autres paramètres,

j'ai utilisé SFML 5.1 lié en version statique

6
Malheureusement cela ne change rien :/
Si je prends la texture découpé et que je la colle sur une texture vierge cela ne résout-il pas le soucis? Mais ça causerait un problème de performance non?

7
Bonjour,

en programmant tranquillement, je me suis aperçu que certains de mes sprites dont leur texture sont tirés d'un fichier commun, et défini à l'aide d'un ".setTextureRect" avaient des "artefacts", des glitchs trainant sur le bord, et faisant apparaître des pixels situés en dehors du rectangle de texture. En faisant des tests, je suis tombé sur la conclusion que l'antialiasing créait ces petits pixels de trop lorsque le sprite subit une rotation (logique, faut bien avoir une diagonale pour avoir l'antialiasing opérant):



#include <SFML/Graphics.hpp>

#include <iostream>


int main()
{
    sf::Sprite sprite;

    sf::Texture texture;
    texture.loadFromFile("test.png");


    sprite.setTexture(texture);
    sprite.setTextureRect(sf::IntRect(21,21,21,21));


    sprite.setScale(15,15);
    sprite.setPosition(300,120);


    sf::ContextSettings settings;
    settings.antialiasingLevel = 8;

    sf::RenderWindow window(sf::VideoMode(800, 600), "SFML works!", sf::Style::Default, settings);


    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                window.close();
        }

        if(sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
            sprite.setRotation(sprite.getRotation() + 0.1);
        if(sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
            sprite.setRotation(sprite.getRotation() - 0.1);
        if(sf::Keyboard::isKeyPressed(sf::Keyboard::Space))
            sprite.setRotation(0);

        window.clear();
        window.draw(sprite);
        window.display();
    }

    return 0;
}
 



J'ai mis le code source ainsi que la texture utiliser pour les tests.
On peut voir que normalement, en position setRotation(0), la fenêtre est bien noire, mais quand on effectue une rotation sur le sprite, on voit apparaître des bords de pixel possédants la couleur des carrés adjacents au rectangle de texture défini.

Ma question finale est: Est-ce que j'ai mal fait quelque chose? Est-ce un bug connu ? (une fonctionnalité désirée comme j'ai pu lire pour d'autres sujets à propos de glitchs visuels)

Cordialement,
Merci de m'avoir lu, bonne journée !

8
Graphique / Re : Carré blanc et changement d'adresse?
« le: Novembre 09, 2016, 09:55:38 am »
Comment la texture peut-être être chargée qu'une seule fois, si je la charge à chaque constructeur?

Edit: Ok j'ai utilisé un pointeur, et ça marche, et je pense avoir compris pour la question ci-dessus:
m_texture n'est pas initialisé dans le constructeur, on initialise la texture en dehors de l'objet, et on envoie cette texture à chaque initialisation dudit objet. Merci bien !

9
Graphique / Carré blanc et changement d'adresse?
« le: Novembre 09, 2016, 01:46:22 am »
Bonjour, je pense que la réponse est simple, mais je ne suis pas sûr de comprendre entièrement mon erreur:

J'ai le problème du carré blanc, à l'affichage d'un sprite, l'erreur vient du fait que l'adresse de la texture bouge (et non détruite).

Dans mon objet (un tiles), on initialise le membre sf::Texture m_texture, qu'on applique directement au membre sf::Sprite m_sprite.
Sauf qu'à l'affichage de ce dit sprite, j'obtiens un carré blanc, l'erreur est vite corrigée si je réinitialise mon sprite dans le getter du sprite.

Ma question est simple: Pourquoi l'adresse de mon membre m_texture bouge d'une fonction à une autre ?(Dans le constructeur, c'est une certaine adresse, et dans mon getter, voire ailleurs, c'est une autre adresse, qui a l'air définitive)

Bien à vous, bonne soirée !

10
Général / Re : Cinématiques?
« le: Octobre 26, 2013, 12:23:30 am »
Merci de ta réponse, j'vais peut-être me lancer dans la création d'un ptit programme d'animation pour les cinématiques, je ne sais pas trop encore :/

11
Général / Re : Cinématiques?
« le: Octobre 24, 2013, 04:51:43 pm »
Et vous? Vous avez une préférence? Je cherche surtout des témoignages, pour faire un choix ^^'

12
Général / Cinématiques?
« le: Octobre 23, 2013, 02:28:57 pm »
Bonjour ! Avec un ami, on compte se lancer dans un projet de jeux vidéos. Pour le moment, nous sommes à la conception sous forme d'idées, mais nous sommes bloqués sur "Comment faire pour les cinématiques" ? Vaut-il mieux utiliser un logiciel tier, et ensuite incorporer au jeu? Si oui, avec quel logiciel? Ou bien tout coder de A à Z avec des sprites?

Et par extention, pour les animations des personnages en général, vaut-il mieux coder le mouvement, ou bien faire une image avec différente position du sprite en mouvement?

Voilà, merci de m'avoir lu !

ps: C'est un jeu en 2D, donc aucune animation avec Blender ou Studio Max

13
Graphique / Re : Rectangle à l'intérieur d'un objet
« le: Août 30, 2013, 09:07:55 am »
Déclarer un rectangle? Comme une hitbox traditionnel? Si c'est le cas, n'importe quel sprite a une fonction getGlobalBound.

Mais si tu souhaites une rectangle dans ton objet, alors tu peux initialiser un rectangle à la position de ton objet, oui, et l'afficher dessus, en dessinant (draw) l'objet puis le rectangle, j'espere avoir bien compris ta question, sinon désolé  ???

14
Graphique / Re : Crash avec utilisation de sf::Text et sf::Font
« le: Août 29, 2013, 01:12:22 pm »
Problème résolu, j'ai pris la version GCC 4.7 TDM (SJLJ) - 32 bits qui fonctionne parfaitement !

Merci pour votre aide ! Et merci pour SFML !

15
Graphique / Re : Crash avec utilisation de sf::Text et sf::Font
« le: Août 29, 2013, 11:46:24 am »
Merci pour la réponse, et effectivement, "insoluble" et non "insolvable"  ::)

Pour la version, j'ai compilé moi-même avec Cmake et suivant le tuto, et ma version de compilo est GCC 4.7.1

Merci d'avoir répondu si vite  :D

Pages: [1] 2 Suivante »