SlideShare uma empresa Scribd logo
1 de 16
Baixar para ler offline
Réalisation 
d'un jeu multijoueur
   en JavaScript

      Feedbacks


      Cyrille Bogaert
        @hugeen
• Toxigame

• Impact

• Multijoueur

• Gamedesign
• Toxigame

• Impact

• Multijoueur

• Gamedesign
Toxigame




• Gestion   des parties

• API   de synchronisation

• Authentification   des joueurs
DEMO
• Toxigame

• Impact

• Multijoueur

• Gamedesign
•   Gestion des collisions

•   Sprites et animations

•   Editeur de niveaux

•   Outils de debug
Comment fonctionne Impact ?

 // Création de l’entité Player
 EntityPlayer = ig.Entity.extend({
       // Chargement des sprites du joueur
       animSheet: new ig.AnimationSheet('player.png', 16, 16),
       init: function(x, y, settings) {
           // Ajout d’une animation
           this.addAnim('run', 1.5, [1,2,3]);

           // Appel du constructeur parent
           this.parent(x, y, settings);
       }
 });
• Toxigame

• Impact

• Multijoueur

• Gamedesign
Moteur javascript V8 coté serveur
    Code non-bloquant
                            Requête 1   Requête 2


Bloquant (PHP/ Rails)

                    0 sec                  5 sec    10 sec


Non-bloquant (NodeJS)

                    0 sec                   5 sec   10 sec
Requêtes traditionnelles VS Websockets



                                  Serveur http
     Navigateur                   traditionnel     Navigateur                   socket.io




Hello World
 Coté serveur                                       Coté client

 // Un client vient de se connecter                // Le client reçoit un message du serveur
 io.sockets.on("connection", function(client) {    server.on("messages", function(data) {
    // Envoi d'un message au client                    console.log(data.hello); // "world"
    client.emit("messages", { hello: "world" });   });
 });
Toxigame
Application au jeux

Nouveau joueur (coté serveur)

 game.on('newPlayer', function(player) {
    this.sendToAll({ spawnPlayer: player });
 });




Les autres joueurs reçoivent l’événement (coté client)

 toxigame.on("server.spawnPlayer", function(player) {
     this.syncPlayer(player);
 });
Comment le brancher sur Impact ?

 // Création de l’entité Player
 EntityPlayer = ig.Entity.extend({
       // Chargement des sprites du joueur
       animSheet: new ig.AnimationSheet('player.png', 16, 16),
       init: function(x, y, settings) {
           // Ajout d’une animation
           this.addAnim('run', 1.5, [1,2,3]);

           // Appel du constructeur parent
           this.parent(x, y, settings);
       },
       update: function() {
           // Envoi de la position du joueur au serveur lorsqu’il bouge
           if(this.hasMoved) {
               toxicode.sendToServer({ synchronizePlayer: this.pos });
           }
       }
 });
• Toxigame

• Impact

• Multijoueur

• Gamedesign
GAMEDESIGN



• L'aspect   multijoueur peut rendre un jeu addictif

• Rester   simple et peaufiner !
DES QUESTIONS ?



    Toxicode recrute
  (Javascript & Ruby on Rails)
          www.toxicode.fr
           @toxicode_fr

Mais conteúdo relacionado

Destaque

Jeux en ligne en bibliothèque
Jeux en ligne en bibliothèque Jeux en ligne en bibliothèque
Jeux en ligne en bibliothèque Julien Devriendt
 
Multiplayer Networking Game
Multiplayer Networking GameMultiplayer Networking Game
Multiplayer Networking GameTanmay Krishna
 
Rawkets - A Massively Multiplayer HTML5 Game [Mozilla GameOn10]
Rawkets - A Massively Multiplayer HTML5 Game [Mozilla GameOn10]Rawkets - A Massively Multiplayer HTML5 Game [Mozilla GameOn10]
Rawkets - A Massively Multiplayer HTML5 Game [Mozilla GameOn10]Robin Hawkes
 
Behind the Scenes: Deploying a Low-Latency Multiplayer Game Globally
Behind the Scenes: Deploying a Low-Latency Multiplayer Game GloballyBehind the Scenes: Deploying a Low-Latency Multiplayer Game Globally
Behind the Scenes: Deploying a Low-Latency Multiplayer Game GloballyJames Gwertzman
 
Rawkets: An inside look at a multiplayer HTML5 game
Rawkets: An inside look at a multiplayer HTML5 gameRawkets: An inside look at a multiplayer HTML5 game
Rawkets: An inside look at a multiplayer HTML5 gameRobin Hawkes
 
Introduction to development of multiplayer HTML5 games (with Socket.io)
Introduction to development of multiplayer HTML5 games (with Socket.io)Introduction to development of multiplayer HTML5 games (with Socket.io)
Introduction to development of multiplayer HTML5 games (with Socket.io)Valerio Riva
 
(GAM402) Deploying a Low-Latency Multiplayer Game Globally: Loadout | AWS re:...
(GAM402) Deploying a Low-Latency Multiplayer Game Globally: Loadout | AWS re:...(GAM402) Deploying a Low-Latency Multiplayer Game Globally: Loadout | AWS re:...
(GAM402) Deploying a Low-Latency Multiplayer Game Globally: Loadout | AWS re:...Amazon Web Services
 
Multiplayer games on iOS
Multiplayer games on iOSMultiplayer games on iOS
Multiplayer games on iOSMagnus Jahnen
 
Multiplayer Computer Games - lecture slides 2013
Multiplayer Computer Games - lecture slides 2013Multiplayer Computer Games - lecture slides 2013
Multiplayer Computer Games - lecture slides 2013Jouni Smed
 
Multiplayer Online Gaming
Multiplayer Online GamingMultiplayer Online Gaming
Multiplayer Online Gamingchetnamistry
 
GDC 2015 - Low-latency Multiplayer Gaming with AWS
GDC 2015 - Low-latency Multiplayer Gaming with AWS GDC 2015 - Low-latency Multiplayer Gaming with AWS
GDC 2015 - Low-latency Multiplayer Gaming with AWS Nate Wiger
 

Destaque (11)

Jeux en ligne en bibliothèque
Jeux en ligne en bibliothèque Jeux en ligne en bibliothèque
Jeux en ligne en bibliothèque
 
Multiplayer Networking Game
Multiplayer Networking GameMultiplayer Networking Game
Multiplayer Networking Game
 
Rawkets - A Massively Multiplayer HTML5 Game [Mozilla GameOn10]
Rawkets - A Massively Multiplayer HTML5 Game [Mozilla GameOn10]Rawkets - A Massively Multiplayer HTML5 Game [Mozilla GameOn10]
Rawkets - A Massively Multiplayer HTML5 Game [Mozilla GameOn10]
 
Behind the Scenes: Deploying a Low-Latency Multiplayer Game Globally
Behind the Scenes: Deploying a Low-Latency Multiplayer Game GloballyBehind the Scenes: Deploying a Low-Latency Multiplayer Game Globally
Behind the Scenes: Deploying a Low-Latency Multiplayer Game Globally
 
Rawkets: An inside look at a multiplayer HTML5 game
Rawkets: An inside look at a multiplayer HTML5 gameRawkets: An inside look at a multiplayer HTML5 game
Rawkets: An inside look at a multiplayer HTML5 game
 
Introduction to development of multiplayer HTML5 games (with Socket.io)
Introduction to development of multiplayer HTML5 games (with Socket.io)Introduction to development of multiplayer HTML5 games (with Socket.io)
Introduction to development of multiplayer HTML5 games (with Socket.io)
 
(GAM402) Deploying a Low-Latency Multiplayer Game Globally: Loadout | AWS re:...
(GAM402) Deploying a Low-Latency Multiplayer Game Globally: Loadout | AWS re:...(GAM402) Deploying a Low-Latency Multiplayer Game Globally: Loadout | AWS re:...
(GAM402) Deploying a Low-Latency Multiplayer Game Globally: Loadout | AWS re:...
 
Multiplayer games on iOS
Multiplayer games on iOSMultiplayer games on iOS
Multiplayer games on iOS
 
Multiplayer Computer Games - lecture slides 2013
Multiplayer Computer Games - lecture slides 2013Multiplayer Computer Games - lecture slides 2013
Multiplayer Computer Games - lecture slides 2013
 
Multiplayer Online Gaming
Multiplayer Online GamingMultiplayer Online Gaming
Multiplayer Online Gaming
 
GDC 2015 - Low-latency Multiplayer Gaming with AWS
GDC 2015 - Low-latency Multiplayer Gaming with AWS GDC 2015 - Low-latency Multiplayer Gaming with AWS
GDC 2015 - Low-latency Multiplayer Gaming with AWS
 

Semelhante a ToulouseJS - Javascript multiplayer game

Mettez du temps réel dans votre Drupal avec Node JS
Mettez du temps réel dans votre Drupal avec Node JSMettez du temps réel dans votre Drupal avec Node JS
Mettez du temps réel dans votre Drupal avec Node JSMatthieu Guillermin
 
Réu technodejs
Réu technodejsRéu technodejs
Réu technodejsnaholyr
 
Découverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet SpartanDécouverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet SpartanMicrosoft
 
Firefox OS, le web de demain - Epita - 2014-06-06
Firefox OS, le web de demain - Epita - 2014-06-06Firefox OS, le web de demain - Epita - 2014-06-06
Firefox OS, le web de demain - Epita - 2014-06-06Frédéric Harper
 
Monogame Introduction (FR)
Monogame Introduction (FR)Monogame Introduction (FR)
Monogame Introduction (FR)Aloïs Deniel
 
Incubateur Toulousain - Introduction au XNA - Damien Paludetto (26/01/2011)
Incubateur Toulousain - Introduction au XNA - Damien Paludetto (26/01/2011)Incubateur Toulousain - Introduction au XNA - Damien Paludetto (26/01/2011)
Incubateur Toulousain - Introduction au XNA - Damien Paludetto (26/01/2011)lincubateur_tls
 
Monitoring applicatif : Pourquoi et comment ?
Monitoring applicatif : Pourquoi et comment ?Monitoring applicatif : Pourquoi et comment ?
Monitoring applicatif : Pourquoi et comment ?Kenny Dits
 
Messaging temps réel avec Go
Messaging temps réel avec GoMessaging temps réel avec Go
Messaging temps réel avec GoMickaël Rémond
 
Jeux multi-écrans : envolez-vous avec Kinect, Silverlight et WP7
Jeux multi-écrans : envolez-vous avec Kinect, Silverlight et WP7Jeux multi-écrans : envolez-vous avec Kinect, Silverlight et WP7
Jeux multi-écrans : envolez-vous avec Kinect, Silverlight et WP7Microsoft
 
Unity 3D : Guide débutant
Unity 3D : Guide débutantUnity 3D : Guide débutant
Unity 3D : Guide débutantAntho Cardinale
 
Nouveautés JavaScript dans le monde Microsoft
Nouveautés JavaScript dans le monde MicrosoftNouveautés JavaScript dans le monde Microsoft
Nouveautés JavaScript dans le monde Microsoftdavrous
 
Retour d'expérience développement jeux android
Retour d'expérience développement jeux androidRetour d'expérience développement jeux android
Retour d'expérience développement jeux androidjodem
 
Audio Integration in Unity (French)
Audio Integration in Unity (French)Audio Integration in Unity (French)
Audio Integration in Unity (French)Vincent PERCEVAULT
 
Creation de jeux en ligne suib-i.com
Creation de jeux en ligne suib-i.comCreation de jeux en ligne suib-i.com
Creation de jeux en ligne suib-i.compierota
 
Porte feuilles-perso
Porte feuilles-persoPorte feuilles-perso
Porte feuilles-persoymoumen
 
Haxe, le graal du développeur touche-à-tout
Haxe, le graal du développeur touche-à-toutHaxe, le graal du développeur touche-à-tout
Haxe, le graal du développeur touche-à-toutFrançois Barbut
 

Semelhante a ToulouseJS - Javascript multiplayer game (20)

Mettez du temps réel dans votre Drupal avec Node JS
Mettez du temps réel dans votre Drupal avec Node JSMettez du temps réel dans votre Drupal avec Node JS
Mettez du temps réel dans votre Drupal avec Node JS
 
Réu technodejs
Réu technodejsRéu technodejs
Réu technodejs
 
Découverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet SpartanDécouverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet Spartan
 
Firefox OS, le web de demain - Epita - 2014-06-06
Firefox OS, le web de demain - Epita - 2014-06-06Firefox OS, le web de demain - Epita - 2014-06-06
Firefox OS, le web de demain - Epita - 2014-06-06
 
Monogame Introduction (FR)
Monogame Introduction (FR)Monogame Introduction (FR)
Monogame Introduction (FR)
 
Incubateur Toulousain - Introduction au XNA - Damien Paludetto (26/01/2011)
Incubateur Toulousain - Introduction au XNA - Damien Paludetto (26/01/2011)Incubateur Toulousain - Introduction au XNA - Damien Paludetto (26/01/2011)
Incubateur Toulousain - Introduction au XNA - Damien Paludetto (26/01/2011)
 
Monitoring applicatif : Pourquoi et comment ?
Monitoring applicatif : Pourquoi et comment ?Monitoring applicatif : Pourquoi et comment ?
Monitoring applicatif : Pourquoi et comment ?
 
Guide Unity 3D pdf
Guide Unity 3D pdfGuide Unity 3D pdf
Guide Unity 3D pdf
 
Messaging temps réel avec Go
Messaging temps réel avec GoMessaging temps réel avec Go
Messaging temps réel avec Go
 
Jeux multi-écrans : envolez-vous avec Kinect, Silverlight et WP7
Jeux multi-écrans : envolez-vous avec Kinect, Silverlight et WP7Jeux multi-écrans : envolez-vous avec Kinect, Silverlight et WP7
Jeux multi-écrans : envolez-vous avec Kinect, Silverlight et WP7
 
Unity 3D : Guide débutant
Unity 3D : Guide débutantUnity 3D : Guide débutant
Unity 3D : Guide débutant
 
Vert.x 3
Vert.x 3Vert.x 3
Vert.x 3
 
Nouveautés JavaScript dans le monde Microsoft
Nouveautés JavaScript dans le monde MicrosoftNouveautés JavaScript dans le monde Microsoft
Nouveautés JavaScript dans le monde Microsoft
 
Retour d'expérience développement jeux android
Retour d'expérience développement jeux androidRetour d'expérience développement jeux android
Retour d'expérience développement jeux android
 
Ogre 3D : une introduction
Ogre 3D : une introductionOgre 3D : une introduction
Ogre 3D : une introduction
 
Audio Integration in Unity (French)
Audio Integration in Unity (French)Audio Integration in Unity (French)
Audio Integration in Unity (French)
 
JavaSwing.pdf
JavaSwing.pdfJavaSwing.pdf
JavaSwing.pdf
 
Creation de jeux en ligne suib-i.com
Creation de jeux en ligne suib-i.comCreation de jeux en ligne suib-i.com
Creation de jeux en ligne suib-i.com
 
Porte feuilles-perso
Porte feuilles-persoPorte feuilles-perso
Porte feuilles-perso
 
Haxe, le graal du développeur touche-à-tout
Haxe, le graal du développeur touche-à-toutHaxe, le graal du développeur touche-à-tout
Haxe, le graal du développeur touche-à-tout
 

ToulouseJS - Javascript multiplayer game

  • 1. Réalisation  d'un jeu multijoueur en JavaScript Feedbacks Cyrille Bogaert @hugeen
  • 2. • Toxigame • Impact • Multijoueur • Gamedesign
  • 3. • Toxigame • Impact • Multijoueur • Gamedesign
  • 4. Toxigame • Gestion des parties • API de synchronisation • Authentification des joueurs
  • 6. • Toxigame • Impact • Multijoueur • Gamedesign
  • 7. Gestion des collisions • Sprites et animations • Editeur de niveaux • Outils de debug
  • 8. Comment fonctionne Impact ? // Création de l’entité Player EntityPlayer = ig.Entity.extend({ // Chargement des sprites du joueur animSheet: new ig.AnimationSheet('player.png', 16, 16), init: function(x, y, settings) { // Ajout d’une animation this.addAnim('run', 1.5, [1,2,3]); // Appel du constructeur parent this.parent(x, y, settings); } });
  • 9. • Toxigame • Impact • Multijoueur • Gamedesign
  • 10. Moteur javascript V8 coté serveur Code non-bloquant Requête 1 Requête 2 Bloquant (PHP/ Rails) 0 sec 5 sec 10 sec Non-bloquant (NodeJS) 0 sec 5 sec 10 sec
  • 11. Requêtes traditionnelles VS Websockets Serveur http Navigateur traditionnel Navigateur socket.io Hello World Coté serveur Coté client // Un client vient de se connecter // Le client reçoit un message du serveur io.sockets.on("connection", function(client) { server.on("messages", function(data) { // Envoi d'un message au client console.log(data.hello); // "world" client.emit("messages", { hello: "world" }); }); });
  • 12. Toxigame Application au jeux Nouveau joueur (coté serveur) game.on('newPlayer', function(player) { this.sendToAll({ spawnPlayer: player }); }); Les autres joueurs reçoivent l’événement (coté client) toxigame.on("server.spawnPlayer", function(player) { this.syncPlayer(player); });
  • 13. Comment le brancher sur Impact ? // Création de l’entité Player EntityPlayer = ig.Entity.extend({ // Chargement des sprites du joueur animSheet: new ig.AnimationSheet('player.png', 16, 16), init: function(x, y, settings) { // Ajout d’une animation this.addAnim('run', 1.5, [1,2,3]); // Appel du constructeur parent this.parent(x, y, settings); }, update: function() { // Envoi de la position du joueur au serveur lorsqu’il bouge if(this.hasMoved) { toxicode.sendToServer({ synchronizePlayer: this.pos }); } } });
  • 14. • Toxigame • Impact • Multijoueur • Gamedesign
  • 15. GAMEDESIGN • L'aspect multijoueur peut rendre un jeu addictif • Rester simple et peaufiner !
  • 16. DES QUESTIONS ? Toxicode recrute (Javascript & Ruby on Rails) www.toxicode.fr @toxicode_fr