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

Auteur Sujet: Multijoueur ?  (Lu 7159 fois)

0 Membres et 1 Invité sur ce sujet

MyPix

  • Full Member
  • ***
  • Messages: 117
    • Voir le profil
    • E-mail
Multijoueur ?
« le: Novembre 30, 2014, 12:21:21 am »
Bonjour,

J'aimerais savoir, comment je procède pour faire un jeu multijoueur en temps réel, (pvp) en gros, j'ai besoin d'avoir
- La position absolue du joueur dans la map (car la vue est centrée sur le joueur, si il est en dehors de la vue je dois le savoir (d'ailleur comment je fais ça ? Si la vue est centrée sur le joueur , les coordonées du rendu sont aussi déplacées non ?))
- si il fait une action, sur qui et quoi (par exemple "xxFaze420 lance Boomerang sur xxDylan")
- Si il envoie un message dans le chat, si oui quoi ("t 1 hacker je te signal" :D)
En gros, Un Vector, des ints et des strings

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : Multijoueur ?
« Réponse #1 le: Novembre 30, 2014, 11:22:43 am »
Et tu as des questions précises ou bien tu veux juste qu'on fasse tout le boulot à ta place ? ???
Laurent Gomila - SFML developer

MyPix

  • Full Member
  • ***
  • Messages: 117
    • Voir le profil
    • E-mail
Re : Multijoueur ?
« Réponse #2 le: Novembre 30, 2014, 12:14:37 pm »
Non ^^
Je veux des techniques surtout, pas du code, me dire comment faire ^^

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : Multijoueur ?
« Réponse #3 le: Novembre 30, 2014, 01:40:09 pm »
C'est très vague. Je ne suis même pas sûr de ce que tu demandes exactement. Normalement tu es censé défricher ce genre de grosse question tout seul (internet, Google, tout ça tout ça), et venir demander de l'aide si tu bloques sur des points précis.
Laurent Gomila - SFML developer

MyPix

  • Full Member
  • ***
  • Messages: 117
    • Voir le profil
    • E-mail
Re : Multijoueur ?
« Réponse #4 le: Novembre 30, 2014, 04:54:31 pm »
En gros, ce que je demande c'est comment transmettre des informations comme la position du joueur dans la map et le placer en conséquence indépendament de la vue du joueur, l'action qu'il effectue (idle/attack(sur qui?)/move(quelle direction?) et si il veut dire quelque chose dans le chat,
Au pire, y'a pas un tuto sur la création  de jeux multijoueur avec la sfml ?

G.

  • Hero Member
  • *****
  • Messages: 1592
    • Voir le profil
Re : Multijoueur ?
« Réponse #5 le: Novembre 30, 2014, 05:55:24 pm »
Bah y'a des tutoriels sur les sockets et les packets. Fais les, tu sauras comment envoyer des données. (ne serait-ce que faire un chat)

MyPix

  • Full Member
  • ***
  • Messages: 117
    • Voir le profil
    • E-mail
Re : Multijoueur ?
« Réponse #6 le: Novembre 30, 2014, 08:46:02 pm »
Ouais, et pour la création de jeux multi ^^

MyPix

  • Full Member
  • ***
  • Messages: 117
    • Voir le profil
    • E-mail
Re : Multijoueur ?
« Réponse #7 le: Décembre 01, 2014, 09:30:50 pm »
J'ai touché un peu aux TCP Socket, et, ma foi, la SFML rend ça si simple, mais j'aimerais savoir, quelle est la meilleure structure pour un jeu multijoueur ? P2P ?
Alors pour le P2P je gère ça comment ? J'ai pensé à créer un Tableau Vector "Destinataires" et une boucle qui envairais ma position à tout le monde, du coté réception, ce serait un autre tableau contenant les "Envoyeurs" et il vérifierais à chaque instant ce qu'on lui envoie

Au niveau du format des données, comment organiser ça ? Je dois avoir la position x et y, l'action que le personnage fait (IDLE/MOVE/SPRINT/JUMP/..); la direction vers ou il regarde et enfin, si il attaque, sa cible, j'ai pensé à créer un objet "MultiplayerPlayer" hérité de la classe que je ferais "Player" (qui sera notre joueur) qui aurait ses attributs, mais à ce que je sache ce n'est pas possible d'envoyer des objets personnalisés dans le socket, si ? Et enfin, je dois positionner le joueur indépendamment de la vue, en gros, le joueur chez lui sera toujours centré sur l'écran, comment récupérer se coordonnées ABSOLUES et les appliquer à un joueur distant ?

Je pense également gérer ça en 2 Thread
Thread principal avec le game engine,etc..
Thread secondaire gérant le chat et les fonctionnalités réseau/multijoueur

Sinon y'a les client-serveur, mais je sais pas comment gérer ça..
« Modifié: Décembre 01, 2014, 10:20:40 pm par MyPix »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : Multijoueur ?
« Réponse #8 le: Décembre 01, 2014, 11:03:10 pm »
Si tu as des idées alors essaye les. Personne ne va te donner tout cuit la formule magique pour y arriver ; d'ailleurs il n'y en a pas. Il faut coder, apprendre de ses erreurs, recommencer, ...

Citer
mais à ce que je sache ce n'est pas possible d'envoyer des objets personnalisés dans le socket, si ?
Il y a un tutoriel dédié à cette question...

Citer
Et enfin, je dois positionner le joueur indépendamment de la vue, en gros, le joueur chez lui sera toujours centré sur l'écran, comment récupérer se coordonnées ABSOLUES et les appliquer à un joueur distant ?
Si c'est la vue qui est centrée sur le joueur, alors sa position est déjà définie de manière absolue non ? Si ce n'est pas le cas, tu te compliques la vie pour rien.

Citer
Je pense également gérer ça en 2 Thread
Thread principal avec le game engine,etc..
Thread secondaire gérant le chat et les fonctionnalités réseau/multijoueur
Fais le, et regarde ce que ça donne ;)

Citer
Sinon y'a les client-serveur, mais je sais pas comment gérer ça..
Google est ton ami. Et aussi, ne te laisse pas impressionner par les noms, au fond P2P ou client/serveur, ça ne fait pas tant de différence que ça.
Laurent Gomila - SFML developer

MyPix

  • Full Member
  • ***
  • Messages: 117
    • Voir le profil
    • E-mail
Re : Multijoueur ?
« Réponse #9 le: Décembre 02, 2014, 03:33:18 pm »
Merci ^^
Je vais tenter de déja débugger mon game engine, puis je m'attaquerais proprement à la conception,
J'ai vu que le P2P avait quelques problèmes de synchro des fois, du coup dans une partie un joueur peut gagner et dans l'autre un joueur peut perdre, je vais m'entrainer avec une chatroom, en faire  Server/Client et je verrais ce que ça donne
EDIT: Quand je passe un executable, comment faire pour que mon amis se connecte à mois sans problème et quel port utiliser ?
« Modifié: Décembre 02, 2014, 06:12:01 pm par MyPix »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : Multijoueur ?
« Réponse #10 le: Décembre 02, 2014, 06:16:37 pm »
Se connecter sans problème : il faut que les ports soient ouverts et correctement routés de tous les côtés.
Quel port utiliser : celui que tu veux.
Laurent Gomila - SFML developer

MyPix

  • Full Member
  • ***
  • Messages: 117
    • Voir le profil
    • E-mail
Re : Multijoueur ?
« Réponse #11 le: Décembre 02, 2014, 06:45:21 pm »
J'ai essayé avec le port 1600 et j'arrive pas à l'ouvrir, j'ai essayé dans mon pare feu de mettre une "Inbound rule" sur le port 1600 et on n'arrivais toujours pas à se rejoindre, bizarre ^^

MyPix

  • Full Member
  • ***
  • Messages: 117
    • Voir le profil
    • E-mail
Re : Multijoueur ?
« Réponse #12 le: Décembre 03, 2014, 07:11:16 pm »
Bon, j'avais pas envie de refaire un Thread, donc voici un autre problème avec la surcharge d'opérateur
#pragma once
#include <SFML\Network.hpp>
#include <SFML\System.hpp>
#include <SFML\Graphics.hpp>
#include <iostream>
#include <string>
#include <vector>
#include "ChatFeed.h"
#include "ChatNetworking.h"
#define NOMESSAGE "~$nomessage$~"
typedef enum CommandCode
{
        CHANGE_NAME,POKE,DISCONNECT,SHUTDOWN_SERVER,GOOF
}CommandCode;

class ChatPacket
{
public:
        ChatPacket();
        ChatPacket(std::string author, std::string message,std::string timestamp);
        ChatPacket(CommandCode cmdcode, std::string commandarg);
        ~ChatPacket();
        std::string message = NOMESSAGE;
        std::string author;
        std::string timestamp;
        CommandCode commandcode;
        std::string commandarg;

};
sf::Packet& operator <<(sf::Packet& packet, const ChatPacket& chatpacket)
{
        return packet << chatpacket.author << chatpacket.message << chatpacket.timestamp << chatpacket.commandcode << chatpacket.commandarg;
}
sf::Packet& operator >>(sf::Packet& packet, ChatPacket& chatpacket)
{
        return packet >> chatpacket.author >> chatpacket.message >> chatpacket.timestamp >> chatpacket.commandcode >> chatpacket.commandarg;
}

Le Compilo me hurle dessus
Citer
Erreur   1   error C2678: '>>' binaire : aucun opérateur trouvé qui accepte un opérande de partie gauche de type 'sf::Packet' (ou il n'existe pas de conversion acceptable)   c:\users\pierre\documents\visual studio 2013\projects\simplechat\simplechat\ChatPacket.h   36   1   SimpleChat
Erreur   2   error C2678: '>>' binaire : aucun opérateur trouvé qui accepte un opérande de partie gauche de type 'sf::Packet' (ou il n'existe pas de conversion acceptable)   c:\users\pierre\documents\visual studio 2013\projects\simplechat\simplechat\ChatPacket.h   36   1   SimpleChat
   3   IntelliSense : aucun opérateur ">>" ne correspond à ces opérandes
            les types d'opérandes sont : sf::Packet >> CommandCode   c:\Users\Pierre\Documents\Visual Studio 2013\Projects\SimpleChat\SimpleChat\ChatPacket.h   36   83   SimpleChat

WTF

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : Multijoueur ?
« Réponse #13 le: Décembre 03, 2014, 08:15:55 pm »
Citer
Bon, j'avais pas envie de refaire un Thread
Et si j'ai pas envie que les gens mélangent plein de trucs qui n'ont rien à voir dans la même discussion, histoire que le forum reste propre et utilisable ?

Citer
Le Compilo me hurle dessus
L'erreur est pourtant très claire : CommandCode est un type perso, et tu n'as pas défini d'opérateur << et >> avec sf::Packet pour gérer ce type. Mais il est très probable que ce que tu veuilles faire c'est juste les convertir en un type entier.
Laurent Gomila - SFML developer

MyPix

  • Full Member
  • ***
  • Messages: 117
    • Voir le profil
    • E-mail
Re : Multijoueur ?
« Réponse #14 le: Décembre 03, 2014, 08:44:18 pm »
Donc je cast ce type en entier ? Mais comment le récupérer en CommandCode apres ?