SlideShare uma empresa Scribd logo
1 de 89
Baixar para ler offline
Desenvolvimento de jogos,
   Javascript e HTML5

      Willian Molinari (a.k.a PotHix)
Grupo de usuários Ruby de São Paulo
Equipe de Cloud Computing
Linguagens
   Várias! :)
Frameworks e Libs
       Varios! o/




                     Akihabara
Sou só um cara normal
Meu primeiro game
  Game contest Itaú cultural




 Criado por: @PotHix / @CrociDB
C++
    Allegro
Linux / Windows
Vencemos!
Mas depois...
Código difícil
Difícil distribuição
Difícil portabilidade
Malloc()
Claro que não!
HTML5*
         Canvas             WebGL
                                           SVG
fileSystem         Audio

                                  Offline cache
  WebSockets


                  Local Storage
Canvas
<canvas width="100" height="100" id="game"></canvas>
Canvas




                                   Rect
         var ctx = document.getElementById("game").getContext('2d');


         ctx.fillRect(25,25,100,100);

         ctx.clearRect(45,45,60,60);

         ctx.strokeRect(50,50,50,50);
Canvas




                            arc()
         ctx.arc(x,y,radius,startAngle,endAngle, anticlockwise);
Canvas




             Linhas e curvas
         quadraticCurveTo(), belzierCurveTo(), lineTo(), moveTo()
Canvas



         Desenho a mão livre
         ctx.beginPath();

         // Circulo maior
         ctx.arc(75,75,50,0,Math.PI*2,true);
         ctx.moveTo(110,75);

         // Boca
         ctx.arc(75,75,35,0,Math.PI,false);
         ctx.moveTo(65,65);

         // Olho direito
         ctx.arc(60,65,5,0,Math.PI*2,true);
         ctx.moveTo(95,65);

         // Olho esquerdo
         ctx.arc(90,65,5,0,Math.PI*2,true);
         ctx.stroke();
Canvas




                         Imagens
     drawImage(img,cropx,cropy,croptx,cropty,scalex,scaley,cordx,cordy)
Canvas



   Exemplo de drawImage
         image = new Image();
         image.src = "source/da/imagem.jpg";

         // Sempre esperar a imagem carregar antes de colocar no canvas
         image.onload = function(){ /* o código do canvas aqui */}

         // Apenas a image e sua posição
         canvas.drawImage(image, x, y);

         // A imagem, suas posições e seu tamanho
         canvas.drawImage(image, x, y, width, height);

         /* A imagen, onde deve ser cortada, qual vai ser o tamanho do corte, o
         tamanho da imagem e onde ela deve ser colocada */
         canvas.drawImage(image, cropx, cropy, crop_tam_x, crop_tam_y,
         scalex, scaley, coordx, coordy);
SVG
Scalable Vector Graphics
SVG




      SVG Animations
        Eric Möller
SVG




      Porque não é usado?
         Falta de editores, suporte e outras coisas
WebGL
OpenGL rodando no browser
WebGL




                                 Quake II GWT: http://code.google.com/p/quake2-gwt-port/




 WebSonic: http://forums.sonicretro.org/index.php?showtopic=24965   WebGL Rage: http://code.google.com/p/webgl-ios-rage/
WebGL




        Acesso direto a GPU
WebGL




        Drivers
WebGL




        Segurança
WebGL




  http://people.opera.com/~emoller/stagedemo
    http://people.opera.com/~emoller/demo2
Offline cache
Offline cache




                Cache Manifest
                 <html manifest="/cache.manifest">
Offline cache




                Exemplo.manifest
                CACHE MANIFEST
                # revision 1

                NETWORK:
                http://www.google-analytics.com

                FALLBACK:
                resources/audio resources/audio/silence.mp3

                CACHE:
                src/maingame_packaged.js
                resources/audio/silence.mp3
                resources/sprites.png
WebSockets
WebSockets




       Exemplo WebSocket
       var connection = new WebSocket('ws://pothix.com/websocket');

       connection.onopen = function () {
         connection.send('funciona!'); // Envia a mensagem para o servidor
       };

       connection.onerror = function (error) {
         // Código para tratar erro de conexão
       };

       connection.onmessage = function (e) {
         // Código para tratar o que fazer em cada mensagem
       };

       connection.onclose = function (e) {
         // Código para tratar quando a conexão é encerrada
       };
WebSockets




             Multiplayer!
              http://swarmation.com/
WebSockets
Tag Audio
<audio><source src="test.mp3" type="audio/mpeg" /></audio>
Audio




                     Latencia
        Velocidade de resposta não é boa em todos os casos.
Audio




        Workaround?
Audio




        Compatibilidade
           Mobile ainda é um problema.
Local Storage
Chega de guardar informações em cookies
localStorage




        Exemplo localStorage
        // Criando um novo item no localStorage
        localStorage.setItem("myGame","The amazing HTML5 programmer")

        // Retornando um item do localStorage
        localStorage.getItem("myGame")
        # => "The amazing HTML5 programmer"

        // Criando com outra Syntax
        localStorage["myGame.stage"] = 1

        // Retornando com outra Syntax. Tudo é armazenado como string.
        localStorage["myGame.stage"]
        # => "1"
fileSystem
Quase nenhum suporte ainda, mas vai ser muito útil!
Game frameworks
    Pelo menos algumas delas.
http://impactjs.com
http://www.phoboslab.org/ztype/
                                  http://playbiolab.com/
ImpactJS




           Partículas
ImpactJS




           Suporte
ImpactJS




           Map editor
ImpactJS




              Física basica
           E exemplos de integração com a lib Box2D
ImpactJS




           Documentação
ImpactJS




           Bons exemplos
ImpactJS




     Script para versão .min
ImpactJS




           Paga :(
            US$ 99
Akihabara




                 Akihabara
            Criado por Francesco Cottone (KesieV Norimaki)
Akihabara




            Vários demos
             https://github.com/akihabara
Solitude          TSpin
   Capman




                            TloS
Leave me alone
Akihabara




            Open Source o/
             https://github.com/akihabara/akihabara
Akihabara




            Map editor
            AkibaKa: Ainda em versão alpha
Akihabara




              Documentação?
            Precisa de várias melhorias, mas aceitamos ajuda! :)
Akihabara




            Assets separados
              gbox.addBundle({file: "bundle.js"})
Akihabara




       Arquivos organizados
        {
            addImage:[
                ["enemy","resources/enemy01.png"]
            ],
            addTiles:[
               {id:"enemy", image:"e1", tilew:16, tileh:32, tilerow:6, gapx:0, gapy:0}
            ],
            addFont:[
               {id:"small", image:"font", tileh:8, tilew:8, tilerow:255, gapx:0, gapy:8}
            ]
        }
Akihabara




            Keymap page
            Sim, no estilo daqueles emuladores :)
Akihabara




            Modularizado
Akihabara




                              gbox.js
            O núcleo da engine. Criação de objetos, blit, audio e etc.
Akihabara




     O namespace principal
            // Objetos e grupos
            gbox.setGroups(["game_group","enemy"]);
            gbox.addObject({id:"e1", group:"enemy", x: 0, y: 0});

            // Blit de objetos
            gbox.blitTile({tileset: this.tileset, ...});

            // Assets
            gbox.addBundle({file:"game-bundle.js"});

            // Audio
            gbox.playAudio("title_screen");
            gbox.stopAudio("title_screen");

            .
            .
            .
Akihabara




               gamecycle.js
            Estados e funcionalidades basicas dos jogos.
Akihabara




                      Game basics
            game = gamecycle.createMaingame("game_id", "game_group");

            // Algumas funções para controlar alguns estados básicos
            game.gameTitleIntroAnimation
            game.pressStartIntroAnimation
            game.gameIntroAnimation
            game.gameMenu

            // Controle de alguns objetos comuns
            game.hud

            .
            .
            .
Akihabara




                         help.js
            Extenções no Javascript e helpers para o game
Akihabara




      Helper de Inicialização
            help.akihabaraInit({
              title:"Zero Wing",
              splash:{
                  // Algumas notas no footnote
                  footnotes:["All this presentation are belong to us"],

                       // Utilizando um background customizado no splash
                       background:["resources/my_awesome_image.jpg"]
                  },

                  // Vamos utilizar offline cache
                  offlinecache: true
            });
Akihabara




                     toys.js
            Helpers para vários estilos de games
Akihabara




            Snippets para jogos
            // Topview
            toys.topview.fireBullet("bullets_group", "bullet1", {power:1})

            // Shoot'em up
            toys.shmup.keepInBounds(this);
            toys.shmup.fireBullet("bullets_group", "bullet1", {power:1})
            toys.shmup.generateScroller("game_group", "game1", {power:1})

            // Plataformer
            toys.platformer.jumpKeys(this, "a");

            // UI
            toys.ui.hud("maingame_hud");

            .
            .
            .
RECONQUEST
Global Game Jam 2011
Plaev Team
 @PotHix            @_bojak




@rmasoni           @CrociDB
RECONQUEST
Galaxy Tab e Motorola Milestone
RECONQUEST
  iPad e iPhone
Open source também!
    https://github.com/plaev/reconquest
Google Web Toolkit
Feito em Java, mas exporta HTML5 e várias outras coisas!
GWT




            Angry Birds
      Feito com GWT e incluído na chrome web store
Outras engines
        Box2D                 Aves
                  bdge
                                            GameQuery
Cocos2D
           https://gist.github.com/768272
Hydra                                         ClanFX
                Isogenic Engine
    Canvex                         Effect games

 Hydrax             Crafty
                                        Mibbu
Site interessante com jogos feitos com HTML5
Algumas conclusões
Boa! Agora já posso criar meu Gears of War com HTML5!!!!!11!!
Obrigado!




                 Perguntas?

http://pothix.com
http://github.com/pothix               pothix@pothix.com

Mais conteúdo relacionado

Semelhante a Desenvolvimento de jogos com HTML5 e Javascript

FLISOL SJC - Desenvolvimento de jogos com javascrit e HTML5
FLISOL SJC - Desenvolvimento de jogos com javascrit e HTML5FLISOL SJC - Desenvolvimento de jogos com javascrit e HTML5
FLISOL SJC - Desenvolvimento de jogos com javascrit e HTML5Willian Molinari
 
Introdução ao desenvolvimento de jogos em OGRE 3D - Mackenzie
Introdução ao desenvolvimento de jogos em OGRE 3D - MackenzieIntrodução ao desenvolvimento de jogos em OGRE 3D - Mackenzie
Introdução ao desenvolvimento de jogos em OGRE 3D - Mackenziejonathanblacknight
 
INdT Mobile Labs - Sparta
INdT Mobile Labs - SpartaINdT Mobile Labs - Sparta
INdT Mobile Labs - SpartaHeitor Carlos
 
técnica de desenvolvimento de jogos para web
técnica de desenvolvimento de jogos para webtécnica de desenvolvimento de jogos para web
técnica de desenvolvimento de jogos para webAndrews Medina
 
Desenvolvimento de Jogos com Cocos2d - Apresentação Coderockr Jam
Desenvolvimento de Jogos com Cocos2d - Apresentação Coderockr JamDesenvolvimento de Jogos com Cocos2d - Apresentação Coderockr Jam
Desenvolvimento de Jogos com Cocos2d - Apresentação Coderockr JamAndré Espeiorin
 
Thiago Valle e Heitor Repolho - Utilizando sparta para para desenvolvimento d...
Thiago Valle e Heitor Repolho - Utilizando sparta para para desenvolvimento d...Thiago Valle e Heitor Repolho - Utilizando sparta para para desenvolvimento d...
Thiago Valle e Heitor Repolho - Utilizando sparta para para desenvolvimento d...INdT
 
Javascript no SAPO e libsapojs
Javascript no SAPO e libsapojsJavascript no SAPO e libsapojs
Javascript no SAPO e libsapojscodebits
 
jQuery - Visão Geral
jQuery - Visão GeraljQuery - Visão Geral
jQuery - Visão GeralKaio Valente
 
Rio Info 2010 - Oficina - Oficina Papel Devigner Novidades HTML5 - Ricardo Pa...
Rio Info 2010 - Oficina - Oficina Papel Devigner Novidades HTML5 - Ricardo Pa...Rio Info 2010 - Oficina - Oficina Papel Devigner Novidades HTML5 - Ricardo Pa...
Rio Info 2010 - Oficina - Oficina Papel Devigner Novidades HTML5 - Ricardo Pa...Rio Info
 
JavaScript ninja com jQuery
JavaScript ninja com jQueryJavaScript ninja com jQuery
JavaScript ninja com jQueryReinaldo Junior
 
Arquitetura JavaScript Escalável da Netflix
Arquitetura JavaScript Escalável da NetflixArquitetura JavaScript Escalável da Netflix
Arquitetura JavaScript Escalável da NetflixBruno Tavares
 
Oficina Android - Games com AndEngine - Dia 2
Oficina Android - Games com AndEngine - Dia 2Oficina Android - Games com AndEngine - Dia 2
Oficina Android - Games com AndEngine - Dia 2Odair Bonin Borges
 
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )João Moura
 
Desenvolvimento de Jogos com HTML5
Desenvolvimento de Jogos com HTML5Desenvolvimento de Jogos com HTML5
Desenvolvimento de Jogos com HTML5Talita Pagani
 
IntroduçãO Ao Xna Campus Party
IntroduçãO Ao Xna  Campus PartyIntroduçãO Ao Xna  Campus Party
IntroduçãO Ao Xna Campus PartyJosé Farias
 
JavaScript e JQuery para Webdesigners
JavaScript e JQuery para WebdesignersJavaScript e JQuery para Webdesigners
JavaScript e JQuery para WebdesignersHarlley Oliveira
 

Semelhante a Desenvolvimento de jogos com HTML5 e Javascript (20)

FLISOL SJC - Desenvolvimento de jogos com javascrit e HTML5
FLISOL SJC - Desenvolvimento de jogos com javascrit e HTML5FLISOL SJC - Desenvolvimento de jogos com javascrit e HTML5
FLISOL SJC - Desenvolvimento de jogos com javascrit e HTML5
 
Introdução ao desenvolvimento de jogos em OGRE 3D - Mackenzie
Introdução ao desenvolvimento de jogos em OGRE 3D - MackenzieIntrodução ao desenvolvimento de jogos em OGRE 3D - Mackenzie
Introdução ao desenvolvimento de jogos em OGRE 3D - Mackenzie
 
Minicurso groovy grails
Minicurso groovy grailsMinicurso groovy grails
Minicurso groovy grails
 
INdT Mobile Labs - Sparta
INdT Mobile Labs - SpartaINdT Mobile Labs - Sparta
INdT Mobile Labs - Sparta
 
técnica de desenvolvimento de jogos para web
técnica de desenvolvimento de jogos para webtécnica de desenvolvimento de jogos para web
técnica de desenvolvimento de jogos para web
 
Desenvolvimento de Jogos com Cocos2d - Apresentação Coderockr Jam
Desenvolvimento de Jogos com Cocos2d - Apresentação Coderockr JamDesenvolvimento de Jogos com Cocos2d - Apresentação Coderockr Jam
Desenvolvimento de Jogos com Cocos2d - Apresentação Coderockr Jam
 
Thiago Valle e Heitor Repolho - Utilizando sparta para para desenvolvimento d...
Thiago Valle e Heitor Repolho - Utilizando sparta para para desenvolvimento d...Thiago Valle e Heitor Repolho - Utilizando sparta para para desenvolvimento d...
Thiago Valle e Heitor Repolho - Utilizando sparta para para desenvolvimento d...
 
Javascript no SAPO e libsapojs
Javascript no SAPO e libsapojsJavascript no SAPO e libsapojs
Javascript no SAPO e libsapojs
 
UTools Unite Brasil
UTools Unite BrasilUTools Unite Brasil
UTools Unite Brasil
 
jQuery - Visão Geral
jQuery - Visão GeraljQuery - Visão Geral
jQuery - Visão Geral
 
Rio Info 2010 - Oficina - Oficina Papel Devigner Novidades HTML5 - Ricardo Pa...
Rio Info 2010 - Oficina - Oficina Papel Devigner Novidades HTML5 - Ricardo Pa...Rio Info 2010 - Oficina - Oficina Papel Devigner Novidades HTML5 - Ricardo Pa...
Rio Info 2010 - Oficina - Oficina Papel Devigner Novidades HTML5 - Ricardo Pa...
 
JavaScript ninja com jQuery
JavaScript ninja com jQueryJavaScript ninja com jQuery
JavaScript ninja com jQuery
 
Arquitetura JavaScript Escalável da Netflix
Arquitetura JavaScript Escalável da NetflixArquitetura JavaScript Escalável da Netflix
Arquitetura JavaScript Escalável da Netflix
 
Oficina Android - Games com AndEngine - Dia 2
Oficina Android - Games com AndEngine - Dia 2Oficina Android - Games com AndEngine - Dia 2
Oficina Android - Games com AndEngine - Dia 2
 
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
 
Desenvolvimento iOS
Desenvolvimento iOSDesenvolvimento iOS
Desenvolvimento iOS
 
Desenvolvimento de Jogos com HTML5
Desenvolvimento de Jogos com HTML5Desenvolvimento de Jogos com HTML5
Desenvolvimento de Jogos com HTML5
 
Realidade Aumentada
Realidade AumentadaRealidade Aumentada
Realidade Aumentada
 
IntroduçãO Ao Xna Campus Party
IntroduçãO Ao Xna  Campus PartyIntroduçãO Ao Xna  Campus Party
IntroduçãO Ao Xna Campus Party
 
JavaScript e JQuery para Webdesigners
JavaScript e JQuery para WebdesignersJavaScript e JQuery para Webdesigners
JavaScript e JQuery para Webdesigners
 

Mais de Willian Molinari

As escolhas do desenvolvedor
As escolhas do desenvolvedorAs escolhas do desenvolvedor
As escolhas do desenvolvedorWillian Molinari
 
Javascript and browser games
Javascript and browser gamesJavascript and browser games
Javascript and browser gamesWillian Molinari
 
How we used ruby to build locaweb's cloud (http://presentations.pothix.com/ru...
How we used ruby to build locaweb's cloud (http://presentations.pothix.com/ru...How we used ruby to build locaweb's cloud (http://presentations.pothix.com/ru...
How we used ruby to build locaweb's cloud (http://presentations.pothix.com/ru...Willian Molinari
 
Html5, gamedev e o skeleton jigsaw
Html5, gamedev e o skeleton jigsawHtml5, gamedev e o skeleton jigsaw
Html5, gamedev e o skeleton jigsawWillian Molinari
 
Implementações paralelas
Implementações paralelasImplementações paralelas
Implementações paralelasWillian Molinari
 
Abertura do ruby_rails_no_mundo_real_guru_sp
Abertura do ruby_rails_no_mundo_real_guru_spAbertura do ruby_rails_no_mundo_real_guru_sp
Abertura do ruby_rails_no_mundo_real_guru_spWillian Molinari
 
What is and how does work RubyLearning.org
What is and how does work RubyLearning.orgWhat is and how does work RubyLearning.org
What is and how does work RubyLearning.orgWillian Molinari
 

Mais de Willian Molinari (14)

Desconstruindo a web
Desconstruindo a webDesconstruindo a web
Desconstruindo a web
 
Mesos
MesosMesos
Mesos
 
As escolhas do desenvolvedor
As escolhas do desenvolvedorAs escolhas do desenvolvedor
As escolhas do desenvolvedor
 
Javascript and browser games
Javascript and browser gamesJavascript and browser games
Javascript and browser games
 
How we used ruby to build locaweb's cloud (http://presentations.pothix.com/ru...
How we used ruby to build locaweb's cloud (http://presentations.pothix.com/ru...How we used ruby to build locaweb's cloud (http://presentations.pothix.com/ru...
How we used ruby to build locaweb's cloud (http://presentations.pothix.com/ru...
 
Html5, gamedev e o skeleton jigsaw
Html5, gamedev e o skeleton jigsawHtml5, gamedev e o skeleton jigsaw
Html5, gamedev e o skeleton jigsaw
 
Ruby e xmpp
Ruby e xmppRuby e xmpp
Ruby e xmpp
 
Game network programming
Game network programmingGame network programming
Game network programming
 
Locasberos
LocasberosLocasberos
Locasberos
 
Simplestack
SimplestackSimplestack
Simplestack
 
Implementações paralelas
Implementações paralelasImplementações paralelas
Implementações paralelas
 
Abertura do ruby_rails_no_mundo_real_guru_sp
Abertura do ruby_rails_no_mundo_real_guru_spAbertura do ruby_rails_no_mundo_real_guru_sp
Abertura do ruby_rails_no_mundo_real_guru_sp
 
Vim
VimVim
Vim
 
What is and how does work RubyLearning.org
What is and how does work RubyLearning.orgWhat is and how does work RubyLearning.org
What is and how does work RubyLearning.org
 

Desenvolvimento de jogos com HTML5 e Javascript

  • 1. Desenvolvimento de jogos, Javascript e HTML5 Willian Molinari (a.k.a PotHix)
  • 2. Grupo de usuários Ruby de São Paulo
  • 3. Equipe de Cloud Computing
  • 4. Linguagens Várias! :)
  • 5. Frameworks e Libs Varios! o/ Akihabara
  • 6. Sou só um cara normal
  • 7. Meu primeiro game Game contest Itaú cultural Criado por: @PotHix / @CrociDB
  • 8. C++ Allegro Linux / Windows
  • 11.
  • 16.
  • 18.
  • 19. HTML5* Canvas WebGL SVG fileSystem Audio Offline cache WebSockets Local Storage
  • 21. Canvas Rect var ctx = document.getElementById("game").getContext('2d'); ctx.fillRect(25,25,100,100); ctx.clearRect(45,45,60,60); ctx.strokeRect(50,50,50,50);
  • 22. Canvas arc() ctx.arc(x,y,radius,startAngle,endAngle, anticlockwise);
  • 23. Canvas Linhas e curvas quadraticCurveTo(), belzierCurveTo(), lineTo(), moveTo()
  • 24. Canvas Desenho a mão livre ctx.beginPath(); // Circulo maior ctx.arc(75,75,50,0,Math.PI*2,true); ctx.moveTo(110,75); // Boca ctx.arc(75,75,35,0,Math.PI,false); ctx.moveTo(65,65); // Olho direito ctx.arc(60,65,5,0,Math.PI*2,true); ctx.moveTo(95,65); // Olho esquerdo ctx.arc(90,65,5,0,Math.PI*2,true); ctx.stroke();
  • 25. Canvas Imagens drawImage(img,cropx,cropy,croptx,cropty,scalex,scaley,cordx,cordy)
  • 26. Canvas Exemplo de drawImage image = new Image(); image.src = "source/da/imagem.jpg"; // Sempre esperar a imagem carregar antes de colocar no canvas image.onload = function(){ /* o código do canvas aqui */} // Apenas a image e sua posição canvas.drawImage(image, x, y); // A imagem, suas posições e seu tamanho canvas.drawImage(image, x, y, width, height); /* A imagen, onde deve ser cortada, qual vai ser o tamanho do corte, o tamanho da imagem e onde ela deve ser colocada */ canvas.drawImage(image, cropx, cropy, crop_tam_x, crop_tam_y, scalex, scaley, coordx, coordy);
  • 28. SVG SVG Animations Eric Möller
  • 29. SVG Porque não é usado? Falta de editores, suporte e outras coisas
  • 31. WebGL Quake II GWT: http://code.google.com/p/quake2-gwt-port/ WebSonic: http://forums.sonicretro.org/index.php?showtopic=24965 WebGL Rage: http://code.google.com/p/webgl-ios-rage/
  • 32. WebGL Acesso direto a GPU
  • 33. WebGL Drivers
  • 34. WebGL Segurança
  • 35. WebGL http://people.opera.com/~emoller/stagedemo http://people.opera.com/~emoller/demo2
  • 37. Offline cache Cache Manifest <html manifest="/cache.manifest">
  • 38. Offline cache Exemplo.manifest CACHE MANIFEST # revision 1 NETWORK: http://www.google-analytics.com FALLBACK: resources/audio resources/audio/silence.mp3 CACHE: src/maingame_packaged.js resources/audio/silence.mp3 resources/sprites.png
  • 40. WebSockets Exemplo WebSocket var connection = new WebSocket('ws://pothix.com/websocket'); connection.onopen = function () { connection.send('funciona!'); // Envia a mensagem para o servidor }; connection.onerror = function (error) { // Código para tratar erro de conexão }; connection.onmessage = function (e) { // Código para tratar o que fazer em cada mensagem }; connection.onclose = function (e) { // Código para tratar quando a conexão é encerrada };
  • 41. WebSockets Multiplayer! http://swarmation.com/
  • 43. Tag Audio <audio><source src="test.mp3" type="audio/mpeg" /></audio>
  • 44. Audio Latencia Velocidade de resposta não é boa em todos os casos.
  • 45. Audio Workaround?
  • 46. Audio Compatibilidade Mobile ainda é um problema.
  • 47. Local Storage Chega de guardar informações em cookies
  • 48. localStorage Exemplo localStorage // Criando um novo item no localStorage localStorage.setItem("myGame","The amazing HTML5 programmer") // Retornando um item do localStorage localStorage.getItem("myGame") # => "The amazing HTML5 programmer" // Criando com outra Syntax localStorage["myGame.stage"] = 1 // Retornando com outra Syntax. Tudo é armazenado como string. localStorage["myGame.stage"] # => "1"
  • 49. fileSystem Quase nenhum suporte ainda, mas vai ser muito útil!
  • 50. Game frameworks Pelo menos algumas delas.
  • 52. http://www.phoboslab.org/ztype/ http://playbiolab.com/
  • 53. ImpactJS Partículas
  • 54. ImpactJS Suporte
  • 55. ImpactJS Map editor
  • 56. ImpactJS Física basica E exemplos de integração com a lib Box2D
  • 57. ImpactJS Documentação
  • 58. ImpactJS Bons exemplos
  • 59. ImpactJS Script para versão .min
  • 60. ImpactJS Paga :( US$ 99
  • 61. Akihabara Akihabara Criado por Francesco Cottone (KesieV Norimaki)
  • 62. Akihabara Vários demos https://github.com/akihabara
  • 63. Solitude TSpin Capman TloS Leave me alone
  • 64. Akihabara Open Source o/ https://github.com/akihabara/akihabara
  • 65. Akihabara Map editor AkibaKa: Ainda em versão alpha
  • 66. Akihabara Documentação? Precisa de várias melhorias, mas aceitamos ajuda! :)
  • 67. Akihabara Assets separados gbox.addBundle({file: "bundle.js"})
  • 68. Akihabara Arquivos organizados { addImage:[ ["enemy","resources/enemy01.png"] ], addTiles:[ {id:"enemy", image:"e1", tilew:16, tileh:32, tilerow:6, gapx:0, gapy:0} ], addFont:[ {id:"small", image:"font", tileh:8, tilew:8, tilerow:255, gapx:0, gapy:8} ] }
  • 69. Akihabara Keymap page Sim, no estilo daqueles emuladores :)
  • 70. Akihabara Modularizado
  • 71. Akihabara gbox.js O núcleo da engine. Criação de objetos, blit, audio e etc.
  • 72. Akihabara O namespace principal // Objetos e grupos gbox.setGroups(["game_group","enemy"]); gbox.addObject({id:"e1", group:"enemy", x: 0, y: 0}); // Blit de objetos gbox.blitTile({tileset: this.tileset, ...}); // Assets gbox.addBundle({file:"game-bundle.js"}); // Audio gbox.playAudio("title_screen"); gbox.stopAudio("title_screen"); . . .
  • 73. Akihabara gamecycle.js Estados e funcionalidades basicas dos jogos.
  • 74. Akihabara Game basics game = gamecycle.createMaingame("game_id", "game_group"); // Algumas funções para controlar alguns estados básicos game.gameTitleIntroAnimation game.pressStartIntroAnimation game.gameIntroAnimation game.gameMenu // Controle de alguns objetos comuns game.hud . . .
  • 75. Akihabara help.js Extenções no Javascript e helpers para o game
  • 76. Akihabara Helper de Inicialização help.akihabaraInit({ title:"Zero Wing", splash:{ // Algumas notas no footnote footnotes:["All this presentation are belong to us"], // Utilizando um background customizado no splash background:["resources/my_awesome_image.jpg"] }, // Vamos utilizar offline cache offlinecache: true });
  • 77. Akihabara toys.js Helpers para vários estilos de games
  • 78. Akihabara Snippets para jogos // Topview toys.topview.fireBullet("bullets_group", "bullet1", {power:1}) // Shoot'em up toys.shmup.keepInBounds(this); toys.shmup.fireBullet("bullets_group", "bullet1", {power:1}) toys.shmup.generateScroller("game_group", "game1", {power:1}) // Plataformer toys.platformer.jumpKeys(this, "a"); // UI toys.ui.hud("maingame_hud"); . . .
  • 80. Plaev Team @PotHix @_bojak @rmasoni @CrociDB
  • 81. RECONQUEST Galaxy Tab e Motorola Milestone
  • 82. RECONQUEST iPad e iPhone
  • 83. Open source também! https://github.com/plaev/reconquest
  • 84. Google Web Toolkit Feito em Java, mas exporta HTML5 e várias outras coisas!
  • 85. GWT Angry Birds Feito com GWT e incluído na chrome web store
  • 86. Outras engines Box2D Aves bdge GameQuery Cocos2D https://gist.github.com/768272 Hydra ClanFX Isogenic Engine Canvex Effect games Hydrax Crafty Mibbu
  • 87. Site interessante com jogos feitos com HTML5
  • 88. Algumas conclusões Boa! Agora já posso criar meu Gears of War com HTML5!!!!!11!!
  • 89. Obrigado! Perguntas? http://pothix.com http://github.com/pothix pothix@pothix.com