Forums Développement Multimédia

Aller au contenu

AS3 et multijoueurs

serveur sockets AS3

6 réponses à ce sujet

#1 Benzouye

  • Members
  • PipPipPipPipPipPipPipPip
  • 583 messages

Posté 23 May 2014 - 09:22 AM

Bonjour à tous,

Dans le cadre d'un projet personnel, j'ai développé un petit jeu de carte basé sur un jeu existant.
Ce jeu propose une variante type "réussite" à jouer seul, et c'est celle que j'ai développée
Je souhaite maintenant m'attaquer à la variante multijoueurs de ce jeu ...

Je ne sais pas par quel bout prendre le sujet. J'ai aperçu des sujets parlants de serveur sockets, mais je n'ai rien trouvé qui m'ai paru abordable/compréhensif.

Du coup, ma question, quelqu'un peut-il prendre un instant pour m'expliquer le fonctionnement général d'une application AS3 multijoueurs en temps réel, les différentes briques à utiliser (serveur sockets ?), les étapes de communication serveur, la logique applicative ... et éventuellement des ressources intéressantes sur le sujet ...

D'avance merci pour le temps que vous prendrez à me lire / à me répondre :)

Pour info, je dispose d'un hébergement web mutualisé, avec PHP et MySQL disponibles, mais sans accès avancés au paramétrage Apache ou PHP.
Benzouye
Travaille avec FlashDevelop 4 + Flex SDK 4.6 open source

#2 thot

    Ceinture Noire

  • Moderateur
  • PipPipPipPipPipPipPip
  • 328 messages

Posté 26 May 2014 - 12:26 PM

Bonjour à toi,

Il y a plusieurs choses à faire avant d'entamer le côté communication réseau de ton jeu, je t'explique:

Une socket pour commencer, peut être plus ou moins comparée à un téléphone portable, pour contacter quelqu'un, tu as besoin du numéro de cette personne tu vas donc l'appeler. C'est ce qui se passe entre ton ordinateur et un autre qui héberge ( le serveur physique ) qui héberge une application ( le serveur logiciel du jeu ) qui a lui aussi un téléphone portable ( une socket ouverte et qui attends les appels entrants ).

Pour le coup, mis à part se connecter et permettre une communication de données entre deux ordinateurs, la socket n'a aucun autre rôle à jouer, cela ne te donnera pas la bonne façon de faire pour envoyer/recevoir tes données ou même dans quel ordre les envoyer, ou quoi envoyer.

Pour reprendre l'exemple du téléphone portable, c'est comme si tu voulais jouer au monopoly avec quelqu'un à l'autre bout du fil dont tu ne parles pas la langue et sans connaître les règles. Tu as les pions, le plateau, l'autre joueur, mais tu ne sais pas quoi faire.


Pour ce qui est des sockets pures ( comment permettre la communication ) tu peux regarder du côté des sockets en as3, les pages de doc donnent des exemples suffisamment simples pour maitriser les bases ( et honnêtement pour commencer tu n'auras pas besoin de plus ).

Ce qu'il te faut en revanche, c'est le code qui envoit, recoit les données et qui les envoie à ton client ( ton jeu ) afin que lui les traîte et sache quoi en faire. Du coup, la partie socket, tu peux la simuler de manière relativement simple au début, tu crées de fausses communications bateaux histoire de pouvoir tester tout les types de données reçus et une fois que tu as finis ça, tu codes ton serveur de jeu et tu branches ton client dessus.

En espérant t'avoir aidé.

#3 tlecoz

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 3485 messages

Posté 25 November 2014 - 17:05 PM

Hello !

Je ne suis pas tout à fait d'accord avec l'explication de Thot

"Pour reprendre l'exemple du téléphone portable, c'est comme si tu voulais jouer au monopoly avec quelqu'un à l'autre bout du fil dont tu ne parles pas la langue et sans connaître les règles. Tu as les pions, le plateau, l'autre joueur, maiars tu ne sais pas quoi faire. "

Pour moi, ce qui se passe est exactement l'inverse :)/>
Car dans ton jeu, tout les interfocuteurs parlent exactement le même langage et partagent exactement les même règle car tout les joueurs jouent au même jeu et utilisent donc le même code.

En fait, un jeu multijoueur ou un jeu avec un seul joueur doté d'un joueur fantome ou d'une IA est très similaire.
Dans le cas du joueur fantome ou de l'IA, tu as forcément une fonction quelque part dans laquelle tu passes la position du personnage et eventuellement d'autres propriétés liés à l'affichage.

Les anims Flash ne peuvent pas directement discuter ensemble.
On passe donc par un serveur qui sert d'intermédiaire. chaque joueur (clients) se connecte au serveur et envoit à toute les frames la position du personnage (et les autres proprietes si besoin) sous forme de string. Le serveur reçoit les message de tout les clients, de toutes les parties jouées en meme temps, et son role à lui c'est de renvoyer les messages d'un joueur d'une partie à tout les autres joueurs de la partie.

par exemple, quand un joueur se connecte à un jeu, le serveur va d'abord lui indiquer dans quel "room" il se trouve, en lui envoyant une ID , par exemple 42, et éventuellement - tout dépend de comment marche le serveur - , il peut t'envoyer ton ID de joueur (on va dire 12).

Ensuite, quand tu déplace un joueur à l'écran, tu envoies à chaque frame ce message au serveur (par exemple)

//roomID#userID#X#Y
42#12#123# 456

le serveur, lui reçoit des message de pleins de joueur, de plein de rooms différentes, mais puisque tu lui indique le numero (42), il peut transmettre dans message à tout les clients connectés à la room 42

tu dois donc avoir une fonction dans ton appli prete a recevoir les info du serveur. Et il va te renvoyer exactement ce que tu lui as envoyé sans le numéro de la room (car ca ne sert à rien, tu ne connais déjà, c'est 42), et il va envoyer exactement le message à tout les clients de la room, donc tout le monde recevra à peu de chose près en même temps

12#123#456

la dans ton appli, tu interpretes ces donnés.
Si le numéro du joueur correspond à l'ID du client, tu ne fais rien car le perso devrait avoir déjà la bonne position à l'écran. Si ce n'est pas le même ID , c'est donc un joueur, il te suffit d'appliquer son déplacement comme si c'était un "joueur fantome".

Et voilà, c'est à peu prés tout.
Ca fait un peu peur mais ce n'est pas très compliqué.
Tout les serveur de socket fonctionnent plus ou moins de la même façon, ça se résume à une fonction qui est appelé depuis le client et qui attend le numéro d'une room (et le nom de l'application aussi, j'avais oublié, car le serveur gère souvent plusieurs jeux en meme temps qui peuvent avoir le même room du même ID qu'un autre jeu) et un message quelconque sous forme de String.

Le serveur envoit ensuite le dit message à tout les client de la room concerné et du jeu concerné.

Après c'est à toi de formater le message comme tu veux, et de l'interpreter comme tu veux.

Bon courage !

#4 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1682 messages

Posté 25 November 2014 - 22:59 PM

un hébergement mutualisé tu oublies, ils ne te laisseront jamais ouvrir des ports.

#5 draad

  • Members
  • PipPipPipPipPipPipPipPip
  • 653 messages

Posté 25 November 2014 - 23:13 PM

J'ai pas lu toute la reponse de tlecoz, mais juste un avis en passant, tu peux commencer par faire un jeu multiplayer au tour par tour, ce qui semblerais le plus probable pour un jeu de "solitaire". Dans ce cas, les communications sont plus simples a gerer, car tu n'aura pas les soucis de lag et d'actions simultannees a gerer.

#6 tlecoz

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 3485 messages

Posté 26 November 2014 - 00:08 AM

Voir le messagepol2095, le 25 November 2014 - 22:59 PM, dit :

un hébergement mutualisé tu oublies, ils ne te laisseront jamais ouvrir des ports.
+1

j'avais pas lu

#7 tlecoz

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 3485 messages

Posté 26 November 2014 - 00:11 AM

ou alors, si, tu peux utiliser "union plateform", c'est super facile à utiliser, c'est tout en AS3 ; il me semble que tu peux même coder au niveau sur serveur socket directement en AS3 et tu peux t'en servir gratuitement. Par contre, ils ne garantissent pas un service fiable à 100% (enfin ils le garantissent mais dans leur version payante).

Ca a été dev par Collin Mook, un flasheur old school



1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)

authorised training centre

Centre de Formation Mediabox - Adobe et Apple Authorised Training Center.

Déclaré auprès de la Direction du Travail et de la Formation Professionnelle

Mediabox : SARL au capital de 62.000€ - Numéro d'activité : 11 75 44555 75 - SIRET : 49371646800035

MEDIABOX, 23, rue de Bruxelles, 75009 PARIS

FFP