Desenvolvimento de jogos com HTML5 e javascript

92
Desenvolvimento de jogos com Javascript e HTML5 por Willian Molinari a.k.a. PotHix Slides em: goo.gl/wfaZ3n

description

Palestra que fiz no Alagoas Dev Day sobre desenvolvimento de jogos com HTML5 e Javascript.

Transcript of Desenvolvimento de jogos com HTML5 e javascript

Page 1: Desenvolvimento de jogos com HTML5 e javascript

Desenvolvimento de jogos com

Javascript e HTML5por

Willian Molinaria.k.a. PotHix

Slides em: goo.gl/wfaZ3n

Page 2: Desenvolvimento de jogos com HTML5 e javascript
Page 3: Desenvolvimento de jogos com HTML5 e javascript
Page 4: Desenvolvimento de jogos com HTML5 e javascript

Delivery Engineering

Page 5: Desenvolvimento de jogos com HTML5 e javascript

?

Page 6: Desenvolvimento de jogos com HTML5 e javascript

Page 7: Desenvolvimento de jogos com HTML5 e javascript

?

Page 8: Desenvolvimento de jogos com HTML5 e javascript

Linguagens

Page 9: Desenvolvimento de jogos com HTML5 e javascript
Page 10: Desenvolvimento de jogos com HTML5 e javascript
Page 11: Desenvolvimento de jogos com HTML5 e javascript
Page 12: Desenvolvimento de jogos com HTML5 e javascript
Page 13: Desenvolvimento de jogos com HTML5 e javascript

¯\_(“.)_/¯

Page 14: Desenvolvimento de jogos com HTML5 e javascript

Histórico

Page 15: Desenvolvimento de jogos com HTML5 e javascript

by @pothix e @crocidb

Robotz Warehousehttps://github.com/PotHix/RobotzWarehouse

Page 16: Desenvolvimento de jogos com HTML5 e javascript

Quase lá! ;)

Page 17: Desenvolvimento de jogos com HTML5 e javascript

WarOShttps://github.com/pothix/waros

Page 18: Desenvolvimento de jogos com HTML5 e javascript

@pothix, @rmasoni, @_bojak, @crocidb

Reconquesthttps://pothix.github.io/RECONQUESThttps://github.com/pothix/reconquest

Page 19: Desenvolvimento de jogos com HTML5 e javascript

Jogando e Aprendendohttp://jogandoeaprendendo.com.br

https://github.com/pothix/jogando_e_aprendendo

Page 20: Desenvolvimento de jogos com HTML5 e javascript

Skeleton Jigsawhttp://plaev.github.io/skel

https://github.com/plaev/skeleton-jigsaw

@pothix e @rmasoni

Page 21: Desenvolvimento de jogos com HTML5 e javascript

Desenv. de Jogos casuais com HTML5

http://goo.gl/t5zLEJ

Page 22: Desenvolvimento de jogos com HTML5 e javascript

Jogos no browser

Page 23: Desenvolvimento de jogos com HTML5 e javascript

Porque Javascript?

Page 24: Desenvolvimento de jogos com HTML5 e javascript
Page 25: Desenvolvimento de jogos com HTML5 e javascript

Vantagens■ Distribuição bem mais fácil

■ Ambiente de desenvolvimento simples

■ Possibilidade de rodar em vários devices

Page 26: Desenvolvimento de jogos com HTML5 e javascript

Desvantagens■ Limitações e suporte de cada device

■ Testes em vários navegadores

■ Debug ainda é difícil

Page 27: Desenvolvimento de jogos com HTML5 e javascript

HTML5*

Canvas

WebGL

WebSockets

Offline cache

Audio

gamepad api

localStorage

Page 28: Desenvolvimento de jogos com HTML5 e javascript

Canvas

Page 29: Desenvolvimento de jogos com HTML5 e javascript

ctx.beginPath();

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

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

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

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

Page 30: Desenvolvimento de jogos com HTML5 e javascript

canvas.drawImage()

Page 31: Desenvolvimento de jogos com HTML5 e javascript

drawImage( img, // image 0, // onde no x começar cortar 0, // onde no y começar cortar 0, // tamanho para corte do x 0, // tamanho para corte do y 0, // onde no x colocar no canvas 0, // onde no y colocar no canvas 14, // largura 20, // altura

)

Page 32: Desenvolvimento de jogos com HTML5 e javascript

drawImage( img, // image 0, // onde no x começar cortar 0, // onde no y começar cortar 0, // tamanho para corte do x 0, // tamanho para corte do y 0, // onde no x colocar no canvas 0, // onde no y colocar no canvas 14, // largura 20, // altura

)

Page 33: Desenvolvimento de jogos com HTML5 e javascript

0,0

Page 34: Desenvolvimento de jogos com HTML5 e javascript

0,20

Page 35: Desenvolvimento de jogos com HTML5 e javascript

drawImage(img, 0, 20, 15, 20, 0, 0, 15, 20)

Page 36: Desenvolvimento de jogos com HTML5 e javascript

drawImage(img, 15, 20, 15, 20, 0, 0, 15, 20)

Page 37: Desenvolvimento de jogos com HTML5 e javascript

drawImage(img, 30, 20, 15, 20, 0, 0, 15, 20)

Page 38: Desenvolvimento de jogos com HTML5 e javascript
Page 39: Desenvolvimento de jogos com HTML5 e javascript
Page 40: Desenvolvimento de jogos com HTML5 e javascript
Page 41: Desenvolvimento de jogos com HTML5 e javascript

Áudio

Page 42: Desenvolvimento de jogos com HTML5 e javascript

// pegando o elemento audiovar audio = document.getElementById('audiotagid')

// tocaraudio.play()

// pausaraudio.pause()

// aumentar / diminuir o volumeaudio.volume+=0.1audio.volume-=0.1

// vários outros...

Áudio

Page 43: Desenvolvimento de jogos com HTML5 e javascript

Latencia

Page 44: Desenvolvimento de jogos com HTML5 e javascript

Mobile

Page 45: Desenvolvimento de jogos com HTML5 e javascript

Web Audio API

Page 46: Desenvolvimento de jogos com HTML5 e javascript

Tempos exatos

Page 48: Desenvolvimento de jogos com HTML5 e javascript

Fonte: caniuse.com

Page 49: Desenvolvimento de jogos com HTML5 e javascript

WebGL

Page 50: Desenvolvimento de jogos com HTML5 e javascript

Quake

iOS Rage

http://blog.tojicode.com/

Page 51: Desenvolvimento de jogos com HTML5 e javascript

http://middle-earth.thehobbit.com/

The hobbit Experiment

Page 52: Desenvolvimento de jogos com HTML5 e javascript

Emscripten

Page 53: Desenvolvimento de jogos com HTML5 e javascript

Banana Breadhttps://developer.mozilla.org/en/demos/detail/bananabread

Page 54: Desenvolvimento de jogos com HTML5 e javascript

Websockets

Page 55: Desenvolvimento de jogos com HTML5 e javascript

// criando a conexãovar url = “ws://pothix.com/websocket”var connection = new WebSocket(url);

// funções para executar assim que acontecer// o dado estadoconnection.onopen = function () {}; connection.onerror = function (error) {};connection.onmessage = function (e) {};connection.onclose = function (e) {};

Websockets

Page 56: Desenvolvimento de jogos com HTML5 e javascript

Swarmationhttp://swarmation.com

Page 57: Desenvolvimento de jogos com HTML5 e javascript

Offline Cache

Page 58: Desenvolvimento de jogos com HTML5 e javascript

CACHE MANIFEST# revision 1

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

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

CACHE:src/maingame_packaged.jsresources/audio/silence.mp3resources/sprites.png

cache.manifest

Page 59: Desenvolvimento de jogos com HTML5 e javascript

localStorage

Page 60: Desenvolvimento de jogos com HTML5 e javascript

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

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

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

// Retornando. Tudo é armazenado como string.localStorage["myGame.stage"]# => "1"

localStorage

Page 61: Desenvolvimento de jogos com HTML5 e javascript

Gamepad API

Page 63: Desenvolvimento de jogos com HTML5 e javascript

id: "PLAYSTATION(R)3 Controller (STANDARD GAMEPAD Vend …) "index: 1timestamp: 18395424738498buttons: Array[8] 0: 0 1: 0, … 6: 0.03291, 7: 0axes: Array[4] 0: -0.01176 1: 0.01961 2: -0.00392 3: -0.01176

Gamepad API

Page 64: Desenvolvimento de jogos com HTML5 e javascript

Engines

Page 66: Desenvolvimento de jogos com HTML5 e javascript

Destaques■ MelonJS (melonjs.org)

■ LimeJS (limejs.com)

■ Akihabara (github.com/akihabara)

■ PandaJS (pandajs.net) new!

■ Crafty (craftyjs.com)

■ Impact (impactjs.com)

Page 67: Desenvolvimento de jogos com HTML5 e javascript

EnginesAkihabara

Akihabara

ImpactJS

Page 68: Desenvolvimento de jogos com HTML5 e javascript
Page 69: Desenvolvimento de jogos com HTML5 e javascript

Desenho e fases

Page 70: Desenvolvimento de jogos com HTML5 e javascript

Map editorhttp://impactjs.com/documentation/weltmeister

Page 71: Desenvolvimento de jogos com HTML5 e javascript

Entity system

Page 72: Desenvolvimento de jogos com HTML5 e javascript

1 ig.module('game.entities.hud')

2 .requires('impact.entity')

3 .defines(function () {

4 EntityHud = ig.Entity.extend({

5 _wmIgnore: true,

6 animSheet: new ig.AnimationSheet('media/hud.png', 10, 10),

7 gravityFactor: 0,

8 zIndex: 2,

9 name: "hud",

10 piece_collected: false,

11

12 init: function (x, y, settings) {

13 this.parent(x, y, settings);

14 this.addAnim('empty', 1, [0]);

15 this.addAnim('full', 1, [1]);

16 },

17

18 update: function () {

19 if( this.piece_collected ){ this.currentAnim = this.anims.full; }

20 this.parent();

21 }

22 });

23 });

Page 73: Desenvolvimento de jogos com HTML5 e javascript
Page 74: Desenvolvimento de jogos com HTML5 e javascript

Áudio

Page 75: Desenvolvimento de jogos com HTML5 e javascript

Audio inicial em multiplos formatos

Page 76: Desenvolvimento de jogos com HTML5 e javascript

Otimização!Vai fazer parte da sua vida

Page 77: Desenvolvimento de jogos com HTML5 e javascript

Audio otimizado

Page 78: Desenvolvimento de jogos com HTML5 e javascript

Antes 2.5MB

Depois 1.0MB

Compressão

*aproximado

Page 79: Desenvolvimento de jogos com HTML5 e javascript

Mobile

Page 80: Desenvolvimento de jogos com HTML5 e javascript

Mobile Safarihttp://youtu.be/aPYeNaR5ps0

Page 81: Desenvolvimento de jogos com HTML5 e javascript

Android BrowserVários problemas

Page 82: Desenvolvimento de jogos com HTML5 e javascript

Muitos devicescom muitos browsers

Page 83: Desenvolvimento de jogos com HTML5 e javascript

FallbacksUm mal necessário

Page 84: Desenvolvimento de jogos com HTML5 e javascript
Page 85: Desenvolvimento de jogos com HTML5 e javascript

EstatísticasBaseadas no Skeleton Jigsaw

Page 86: Desenvolvimento de jogos com HTML5 e javascript

1260 linhas de código Javascript no total (segundo sloc)

Page 87: Desenvolvimento de jogos com HTML5 e javascript

4.0K analytics.js1.2M game.min.js4.0K index.html2.6M media

Tamanho total

Page 88: Desenvolvimento de jogos com HTML5 e javascript

Tempo investidodemo de 4 fases com intro, final e créditos

Page 89: Desenvolvimento de jogos com HTML5 e javascript

26 * 4 = 104 horasDuas semanas de trabalho full time

Page 90: Desenvolvimento de jogos com HTML5 e javascript

Quase 1 anodesde o início

Page 91: Desenvolvimento de jogos com HTML5 e javascript

ConclusãoÉ difícil mas vale a pena! :)