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

Auteur Sujet: Envoyer et recevoir des données problème  (Lu 4231 fois)

0 Membres et 1 Invité sur ce sujet

Scol-Ben

  • Newbie
  • *
  • Messages: 14
    • Voir le profil
Envoyer et recevoir des données problème
« le: Août 10, 2014, 11:26:53 pm »
Bonsoir, voilà j'ai crée un petit jeu 2D pour m’entraîner, dans mon jeu la seule chose que l'on peut faire c'est déplacer un personnage avec des animations.

Donc je voudrais pouvoir mettre un place système multijoueur, alors j'ai donc suivit le tutoriel, j'ai fait en sorte que si l'utilisateur appuis sur S sa crée le serveur. et si un autre appuis sur C sa se connecte en tant que client.

J'ai essayé, sa fonctionne, je suis bien connecté avec le 2ème PC en local.

Maintenant je ne comprend pas comment je pourrais faire en sorte de voir le personnage du PC serveur et de même pour lui, c'est pareille pour les animations, je voudrais envoyé des donnés par rapport à ma position, afficher le personnage et les animations lorsque qu'il appuis sur les déplacements, comme si je jouer seule.

Mais je ne comprend pas comment sa fonctionne de recevoir et envoyé des donnés.

Faut-il crée plusieurs personnage ?
Actuellement je sais que 'socket.send' permet d'envoyé des données et 'socket.receive' permet d'en recevoir, mais ou est-ce que je doit les placers ?

Si vous auriez un exemple rapide, je vous en serai reconnaissant.
Merci à vous.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : Envoyer et recevoir des données problème
« Réponse #1 le: Août 11, 2014, 12:15:47 am »
Il n'y a pas d'exemple rapide, il faut que tu architectures tout un système autour de ça. SFML ne te fournit que les briques de bases pour échanger des données sur le réseau.

En ce qui concerne des exemples moins "rapides", je ne sais pas trop. As-tu cherché sur le forum et le wiki ?
Laurent Gomila - SFML developer

Scol-Ben

  • Newbie
  • *
  • Messages: 14
    • Voir le profil
Re : Envoyer et recevoir des données problème
« Réponse #2 le: Août 11, 2014, 12:31:27 am »
J'ai cherché comment bien utiliser les données en réseau, surtout les exemples.

Rien que le faite de voir le personnage de l'autre PC sa m'aiderai énormément, mais je ne sais pas ou placer pour recevoir et envoyer des donnés n'y comment les utilisés (Je parle pour simplement envoyé un text à l'autre etc...)

Je ne sais pas si tu as compris ce que j'essai d'expliquer.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : Envoyer et recevoir des données problème
« Réponse #3 le: Août 11, 2014, 07:42:13 am »
Oui, je comprends bien que tu ne sais pas par quel bout commencer, mais sans exemple sous la main je ne sais pas comment t'aider ;)
Laurent Gomila - SFML developer

Scol-Ben

  • Newbie
  • *
  • Messages: 14
    • Voir le profil
Mon code
« Réponse #4 le: Août 11, 2014, 01:16:46 pm »
Ah excuse moi, je n'avais pas compris que je devais montrer mon code ^^

Par-contre ce n'est pas du tout ordonnée, j'utilise pas de fonction, n'y d'autre fichier et pas de classe. (Oui c'est pour m’entraîner avec la SFML 2.1)

Voici mon main et les variables au complet :

(click to show/hide)

À l'intérieur de la boucle principale dans les événements, c'est ici que l'on choisit d'être le serveur ou client.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : Envoyer et recevoir des données problème
« Réponse #5 le: Août 11, 2014, 01:24:53 pm »
Citer
Ah excuse moi, je n'avais pas compris que je devais montrer mon code ^^
Non non, tu voulais un exemple concret et je disais juste que je n'en avais pas, et donc que je ne pouvais pas faire grand chose pour toi.

Mais c'est bien que tu aies posté ton code, on va pouvoir avancer. La première chose à faire, c'est structurer ton programme. Tout mélanger dans le main(), c'est bien pour démarrer, prototyper, mais pas plus. Là tu vas commencer à faire des choses complexes donc un minimum de structure sera nécessaire. Essaye de cloisonner les différentes fonctionnalités dans différentes classes et objets. Garde dans ton main() uniquement la logique de haut niveau (init/loading, boucle principale, gestion des évènements, update, draw).

Ensuite, une fois que tu auras un truc structuré et un peu plus clair, tu verras mieux comment et où ajouter des fonctionnalités. Il te faudra notamment une ou plusieurs classes dédiées à la gestion du réseau. Par exemple, une classe Serveur et une classe Client, qui gèrent les sockets et les envois / réception de données brutes. Ensuite tu peux faire le lien avec les classes qui gèrent la logique du jeu : par exemple si tu reçois un paquet de données qui dit "change la position du joueur "A" à (10, 50)", alors tu vas chercher l'objet qui correspond à ce joueur A et lui faire un setPosition(10, 50) (sans entrer dans les détails).

Le plus important dans tout ça c'est de toujours veiller à ne jamais bloquer ta boucle principale. Il faut en toute circonstance continuer à gérer les évènements, mettre à jour les entités et les dessiner. Pour le réseau, ça veut dire soit utiliser des sockets non-bloquantes, soit un thread dédié. Pour débuter, je te conseille les sockets non-bloquantes, ça t'évitera les complications liées aux threads.

N'hésite pas à continuer à poser des questions si nécessaire.
« Modifié: Août 11, 2014, 01:31:26 pm par Laurent »
Laurent Gomila - SFML developer

Scol-Ben

  • Newbie
  • *
  • Messages: 14
    • Voir le profil
Re : Envoyer et recevoir des données problème
« Réponse #6 le: Août 11, 2014, 01:48:05 pm »
D'accord, je te remercie de m'avoir aidé.
Je vais refaire un projet à 0. (Cette fois-ci je vais utilisé tout ce qu'il faut pour être ordonnée).

Par-contre, j'aurai encore quelques questions mais je vais en poser une seule pour le moment pour ne pas trop te déranger.

Donc c'est toujours avec le réseau je n'ai pas compris, admet-ont que je crée une classe qui se nomme 'Personnage joueur1' ceci fonctionne, mais si j'ai bien compris une fois que le client rejoint le serveur il faut faire quoi ?

Créer un nouveau objet 'Personnage joueur2' ??

Et l'utiliser uniquement lorsque nous avons rejoint le serveur, mais dans ce cas comment le serveur doit réagir ? (Lui aussi doit avoir l'objet 'Personnage joueur2' en quelque sorte ça donne ça :

Serveur : Joueur1 = serveur et joueur2 = client ainsi suite.
Client : Ici on inverse, joueur1 = client et joueur2 = serveur.

Je ne sais pas si j'explique bien ma question, ou sinon un deuxième joueur doit t-il utilisé son objet joueur 1 et de même pour le client ?

Mais dans ce cas comment l'afficher ?

Merci.
« Modifié: Août 11, 2014, 01:52:00 pm par Scol-Ben »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : Envoyer et recevoir des données problème
« Réponse #7 le: Août 11, 2014, 02:23:58 pm »
Les joueurs qui se connectent doivent être gérés et dessinés, donc il faut évidemment leur donner une existence (i.e. créer les objets correspondant de la classe qui va bien). Tu peux par exemple faire une classe Joueur qui gère l'affichage et la logique de jeu, et une classe Controlleur qui sera associée à chaque joueur, et qui pourra être spécialisée soit pour utiliser le clavier (joueur local) ou le réseau (joueur distant), voire plus tard une IA (joueur simulé).

Tout ça c'est de la conception, et malheureusement, contrairement à la technique, cela s'acquiert dans l'expérience et la douleur :) On peut te donner des indications assez généralistes comme je le fais, mais on ne pourra pas concevoir ton jeu à ta place. Il faut que tu tâtonnes, que tu réécrives de plus ou moins grosses parties de ton programme régulièrement, et c'est comme ça que tu commenceras à voir comment organiser et implémenter les différentes fonctionnalités.
Laurent Gomila - SFML developer

Scol-Ben

  • Newbie
  • *
  • Messages: 14
    • Voir le profil
Re : Envoyer et recevoir des données problème
« Réponse #8 le: Août 11, 2014, 03:16:27 pm »
Ok merci, dans ce cas je vais essayer de faire plusieurs joueurs sur mon nouveau projet une fois qu'il sera au minimum jouable solo, mais j'ai assez du mal avec le réseau.

En même temps j'irai chercher des programmes d'exemple (C'est plutôt rare de trouver des mini jeux en open source C++/SFML qui utilise le multijoueur).

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : Envoyer et recevoir des données problème
« Réponse #9 le: Août 11, 2014, 03:23:24 pm »
Oui, le réseau c'est compliqué à aborder. C'est sûr qu'avec des exemples concrets ce serait plus facile. Est-ce que tu as fouillé le forum "Projects" du forum anglais ?
Laurent Gomila - SFML developer

Scol-Ben

  • Newbie
  • *
  • Messages: 14
    • Voir le profil
Re : Envoyer et recevoir des données problème
« Réponse #10 le: Août 11, 2014, 05:04:16 pm »
Non je n'ai pas regardé, mais ce n'est pas des projets en open source, c'est juste des présentations.

Je ne suis pas trop doué non plus en anglais.
Pour le moment je vais faire une pause, ce soir je me remet à chercher pour les exemples de jeu en réseau.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : Envoyer et recevoir des données problème
« Réponse #11 le: Août 11, 2014, 06:20:16 pm »
Citer
Non je n'ai pas regardé, mais ce n'est pas des projets en open source, c'est juste des présentations.
Si, la plupart sont open-source.
Laurent Gomila - SFML developer

Scol-Ben

  • Newbie
  • *
  • Messages: 14
    • Voir le profil
Re : Envoyer et recevoir des données problème
« Réponse #12 le: Août 13, 2014, 01:42:07 pm »
Bonjour, je commence petit à petit à comprendre mais, j'aurai une question :

Est-ce que il faut faire une boucle infinie pour recevoir côté client et serveur ?

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : Envoyer et recevoir des données problème
« Réponse #13 le: Août 13, 2014, 01:53:00 pm »
Tu as déjà une boucle infinie (la boucle principale qui régit tout ton programme), donc pas la peine d'en rajouter une. Sauf si tu gères la réception réseau dans un thread séparé.
Laurent Gomila - SFML developer

Scol-Ben

  • Newbie
  • *
  • Messages: 14
    • Voir le profil
Re : Envoyer et recevoir des données problème
« Réponse #14 le: Août 13, 2014, 08:05:25 pm »
D'accord, merci.