Your browser doesn't support the features required by impress.js, so you are presented with a simplified version of this presentation.

For the best experience please use the latest Chrome, Safari or Firefox browser. Upcoming version 10 of Internet Explorer should also handle it.

Creación de juegos en JavaScript
www.serginator.com/juegos-en-js
Vimeo: bit.ly/video-juegos-en-js
mario invader 2 tucamon

Antes y ahora

  • Hardware
    • 8/16 bits
  • 2D
  • Optimización
  • Navegador
    • Memoria
  • 2D y 3D (WebGL)
  • Optimización

HTML5

HTML5

Frameworks

Listado de frameworks completísimo: aquí

DE PAGO

- impactJS ($99) impact.js icon

GRATUITOS

- Akihabara
- Crafty craftyjs icon
- LimeJS
- MelonJS
- Mibbu

Herramientas

Herramientas

Editor de niveles

Validar código

Lint vs Hint

Depurar código

Firebug icon

Navegador

Firefox vs Chrome

Firefox

  • ENGINE: SpiderMonkey
  • Mejor para desarrollar

Chrome

  • ENGINE: V8
  • Mejor para ejecutar

3D

WebGL

Y ahora la chicha

Preparación de la web

Página desde la que empezamos

El CSS

Y el JS

Componentes de un juego

Gameloop

Gameloop

setTimeout

requestAnimationFrame

update()

Se encarga de actualizar el estado del juego

draw()

Se encarga de dibujar el buffer en el contexto

buffer y bufferctx

Dibujamos en éstos porque al renderizar las imágenes sin mostrarlas ganamos mucho en rendimiento. Luego la copia del buffer al canvas actual es súper rápido.

KeyHandler

Objetos

invader icon spaceship icon yellow bird icon

Player

ship icon

Tenemos dos formas de crear objetos en JavaScript. Una sería prototipando, y la otra sería en el propio objeto. Por claridad nos vamos a decantar por hacerlo dentro de la misma función.

Normal

var Ship = function(){{
this.speed = 10;
this.posX = 0;
this.posY = 0;
this.moreSpeed = function(newSpeed){
this.speed += newSpeed;
}
}

Prototipado

var Ship = function(){
this.speed = 10;
this.posX = 0;
this.posY = 0;
}
Ship.prototype.moreSpeed = function(newSpeed){
this.speed += newSpeed;
}
var a = new Ship;
console.log(a.speed);
a.moreSpeed(20);
console.log(a.speed);

Player - Nuestro ejemplo

Player - Sprites

Aunque lo pongamos más adelante en Recursos, cabe mencionar una web desde la que podéis descargar gran cantidad de sprites con los que crear cualquier juego que queráis:

Sprite Database

Disparos

shoots icon shoots icon shoots icon shoots icon shoots icon shoots icon shoots icon shoots icon shoots icon shoots icon shoots icon shoots icon shoots icon shoots icon shoots icon shoots icon

Enemigos

invader icon invader icon invader icon

Colisiones

collision

Colisiones - Ejemplo

IA

robot

Hasta el primer juego creado tuvo una IA.

Algo tan "simple" como un Pong, o
tan complejo como un Ajedrez.

¿Qué sería lo siguiente a hacer?

¡Compártelo!

Para que la charla sirva de algo, merece la pena que cada uno continúe a su manera con el juego.

He abierto un repositorio para que podáis compartir vuestros juegos: github.com/SeRGiNaToR/charla-juegos-en-js.

Si lo preferís, mandadmelo por correo o twitter.

Después montaremos una web para mostrar los distintos juegos que hayamos hecho.

¡Y así vemos los resultados de la charla dentro de unos días!

Recursos

Y para finalizar

¡Esperamos que os haya gustado y servido!