TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

89
Desenvolvimento de jogos, Willian Molinari (a.k.a PotHix) Javascript e HTML5

description

Desenvolvimento de jogos utilizando HTML5 e Javascript

Transcript of TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

Page 1: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

Desenvolvimento de jogos,

Willian Molinari (a.k.a PotHix)

Javascript e HTML5

Page 2: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

Grupo de usuários Ruby de São Paulo

Page 3: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

Equipe de Cloud Computing

Page 4: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

LinguagensVárias! :)

Page 5: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

Frameworks e LibsVarios! \o/

Akihabara

Page 6: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

Sou só um cara normal

Page 7: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

Meu primeiro gameGame contest Itaú cultural

Criado por: @PotHix / @CrociDB

Page 8: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

C++Allegro

Linux / Windows

Page 9: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

Vencemos!

Page 10: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

Mas depois...

Page 11: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5
Page 12: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

Código difícil

Page 13: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

Difícil distribuição

Page 14: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

Difícil portabilidade

Page 15: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

Malloc()

Page 16: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5
Page 17: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

Claro que não!

Page 18: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5
Page 19: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

HTML5*Canvas WebGL

WebSockets Offline cache

Audio

Local Storage

SVGfileSystem

Page 20: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

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

Page 21: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

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

Rect

Page 22: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

arc()

Canvas

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

Page 23: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

Linhas e curvas

Canvas

quadraticCurveTo(), belzierCurveTo(), lineTo(), moveTo()

Page 24: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

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();

Canvas

Desenho a mão livre

Page 25: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

Imagens

Canvas

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

Page 26: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

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

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

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

// A imagem, suas posições e seu tamanhocanvas.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);

Canvas

Exemplo de drawImage

Page 27: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

SVGScalable Vector Graphics

Page 28: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

SVG AnimationsEric Möller

SVG

Page 29: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

Porque não é usado?Falta de editores, suporte e outras coisas

SVG

Page 30: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

WebGLOpenGL rodando no browser

Page 31: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

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/

Page 32: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

Acesso direto a GPU

WebGL

Page 33: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

Drivers

WebGL

Page 34: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

Segurança

WebGL

Page 35: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

WebGL

http://people.opera.com/~emoller/stagedemohttp://people.opera.com/~emoller/demo2

Page 36: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

Offline cache

Page 37: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

Cache Manifest

Offline cache

<html manifest="/cache.manifest">

Page 38: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

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

Offline cache

Exemplo.manifest

Page 39: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

WebSockets

Page 40: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

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

Exemplo WebSocket

Page 41: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

Multiplayer!

WebSockets

http://swarmation.com/

Page 42: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

WebSockets

Page 43: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

Tag Audio<audio><source src="test.mp3" type="audio/mpeg" /></audio>

Page 44: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

Latencia

Audio

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

Page 45: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

Audio

Workaround?

Page 46: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

Compatibilidade

Audio

Mobile ainda é um problema.

Page 47: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

Local StorageChega de guardar informações em cookies

Page 48: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

// 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 com outra Syntax. Tudo é armazenado como string.localStorage["myGame.stage"]# => "1"

localStorage

Exemplo localStorage

Page 49: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

fileSystemQuase nenhum suporte ainda, mas vai ser muito útil!

Page 50: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

Game frameworksPelo menos algumas delas.

Page 51: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

http://impactjs.com

Page 52: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

http://playbiolab.com/http://www.phoboslab.org/ztype/

Page 53: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

Partículas

ImpactJS

Page 54: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

Suporte

ImpactJS

Page 55: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

Map editor

ImpactJS

Page 56: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

Física basicaE exemplos de integração com a lib Box2D

ImpactJS

Page 57: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

Documentação

ImpactJS

Page 58: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

Bons exemplos

ImpactJS

Page 59: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

Script para versão .min

ImpactJS

Page 60: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

Paga :(US$ 99

ImpactJS

Page 61: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

AkihabaraCriado por Francesco Cottone (KesieV Norimaki)

Akihabara

Page 62: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

Vários demoshttps://github.com/akihabara

Akihabara

Page 64: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

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

Akihabara

Page 65: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

Map editor

Akihabara

AkibaKa: Ainda em versão alpha

Page 66: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

Documentação?

Akihabara

Precisa de várias melhorias, mas aceitamos ajuda! :)

Page 67: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

Assets separados

Akihabara

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

Page 68: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

{ 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

Arquivos organizados

Page 69: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

Keymap page

Akihabara

Sim, no estilo daqueles emuladores :)

Page 70: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

Modularizado

Akihabara

Page 71: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

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

Akihabara

Page 72: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

Akihabara

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

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

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

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

.

.

.

Page 73: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

gamecycle.jsEstados e funcionalidades basicas dos jogos.

Akihabara

Page 74: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

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

// Algumas funções para controlar alguns estados básicosgame.gameTitleIntroAnimationgame.pressStartIntroAnimationgame.gameIntroAnimationgame.gameMenu

// Controle de alguns objetos comunsgame.hud

.

.

.

Akihabara

Game basics

Page 75: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

help.jsExtenções no Javascript e helpers para o game

Akihabara

Page 76: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

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

Helper de Inicialização

Page 77: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

toys.jsHelpers para vários estilos de games

Akihabara

Page 78: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

Akihabara

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

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

// Plataformertoys.platformer.jumpKeys(this, "a");

// UItoys.ui.hud("maingame_hud");

.

.

.

Page 79: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

RECONQUESTGlobal Game Jam 2011

Page 80: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

Plaev Team@PotHix @_bojak

@CrociDB@rmasoni

Page 81: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

RECONQUESTGalaxy Tab e Motorola Milestone

Page 82: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

RECONQUESTiPad e iPhone

Page 83: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

Open source também!https://github.com/plaev/reconquest

Page 84: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

Google Web ToolkitFeito em Java, mas exporta HTML5 e várias outras coisas!

Page 85: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

Angry BirdsFeito com GWT e incluído na chrome web store

GWT

Page 86: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

Outras enginesBox2D Aves

Canvex

ClanFX

bdgeCocos2D

Crafty

Effect games

GameQuery

Hydra

Hydrax

Isogenic Engine

Mibbu

https://gist.github.com/768272

Page 87: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

Site interessante com jogos feitos com HTML5

Page 88: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

Algumas conclusõesBoa! Agora já posso criar meu Gears of War com HTML5!!!!!11!!

Page 89: TDC2011 - Desenvolvimento de jogos com Javascript e HTML5

Perguntas?

Obrigado!

http://pothix.comhttp://github.com/pothix [email protected]