On Github omailson / frontinrecife2013
Mailson Menezes
openBossa @ INdT
Mailson Menezes
Desenvolvimento da versão HTML5 do Incredible Circus.
Jogue no Facebook
Também disponível para iOS, Android e Windows Phone
Menor controle sobre a plataforma
Estávamos acostumados a trabalhar em um ambiente nativo
Preocupação com a performance do jogo
Experiência do time
<canvas id="game" width="200" height="200"></canvas>
Acesso via JavaScript
var canvas = document.getElementById("game"); var context = canvas.getContext("2d"); context.fillStyle = "#c80000" context.fillRect(10, 10, 55, 50); context.fillStyle = "rgba(0, 0, 200, 0.5)" context.fillRect(30, 30, 55, 50);
As imagens não serão imediatamente exibidas, serão desenhadas
var image = new Image(); var imageLoaded = false; image.onload = function () { imageLoaded = true; }; image.src = "images/smurf.png"
if (imageLoaded) context.drawImage(image, 30, 30);
context.drawImage(img, sx, sy, sw, sh, dx, dy, dw, dh);
Útil para o uso de spritesheets
var image = new Image(); image.onload = function () { context.drawImage(image, 0, 0, 128, 128, 30, 30, 128, 128); }; image.src = "images/smurfs_sheet.png"
Chamar o update do jogo em um intervalo fixo de tempo
setInterval
function tick() { /* ... */ } setInterval(tick, 30);
Não temos muito controle sobre o loop do jogo
setTimeout
function tick() { /* ... */ setTimeout(tick, 30); } tick();
requestAnimationFrame
function tick(delta) { /* ... */ requestAnimationFrame(tick); } tick();
var Person = function (name) { this.name = name; }; Person.prototype.sayHello = function () { console.log("Hello, my name is " + this.name); }; var p = new Person("John Doe"); p.sayHello(); // Hello, my name is John DoeUma das formas de OO
Não muito usado em games, mas bastante importante
Melhora o reuso dos componentes
Mais fácil de identificar os tipos
Browsers evoluem rapidamente