+ All Categories
Home > Documents > Gil Megidish [email protected]. And I love writing / rewriting / reverse engineering games.

Gil Megidish [email protected]. And I love writing / rewriting / reverse engineering games.

Date post: 25-Dec-2015
Category:
Upload: natalie-campbell
View: 215 times
Download: 0 times
Share this document with a friend
43
<games /> Gil Megidish [email protected]
Transcript
Page 1: Gil Megidish gil@megidish.net. And I love writing / rewriting / reverse engineering games.

<games /><games />

Gil [email protected]

Page 2: Gil Megidish gil@megidish.net. And I love writing / rewriting / reverse engineering games.

And I love writing / rewriting / reverse engineering games

Page 3: Gil Megidish gil@megidish.net. And I love writing / rewriting / reverse engineering games.
Page 4: Gil Megidish gil@megidish.net. And I love writing / rewriting / reverse engineering games.

Canvas

Video

Audio

Web Sockets

Web Storage

Web Worker

Web Database

Selectors

Validation

File API

Semantic Elements

What The Heck is HTML5

Page 5: Gil Megidish gil@megidish.net. And I love writing / rewriting / reverse engineering games.

Games + Javascript?= wtf

Page 6: Gil Megidish gil@megidish.net. And I love writing / rewriting / reverse engineering games.

Why Bother With Javascript?• Fun to develop

– Hacker’s spielplatz!

• Fast deployment– Serve static files

• Easy to debug– alert(), firebug.. Still better than the alternative!

• Open source and free tools– Notepad, vi, emacs

• B.Y.O. framework– jQuery?

spielplatz

Page 7: Gil Megidish gil@megidish.net. And I love writing / rewriting / reverse engineering games.

But Why REALLY?

• Has been around for ages• Won’t go away any time soon

• Wide support:– Web browsers– Mobile devices– Facebook applications– On a rocket near you

Page 8: Gil Megidish gil@megidish.net. And I love writing / rewriting / reverse engineering games.

LOGIC

GRAPHICS

INPUT

SOUND

Anatomy of a Game

MUSIC

MULTIPLAYER

GAME ASSETS

Page 9: Gil Megidish gil@megidish.net. And I love writing / rewriting / reverse engineering games.

LOGIC

GRAPHICS

INPUT

SOUND

Anatomy of a Game

MUSIC

MULTIPLAYER

GAME ASSETS

javascript code

<canvas>

onkeydown, onmousedown

<audio>

<audio>

ajax, WebSocket

Images, Audio, Video and Binary supported by browsers

Page 10: Gil Megidish gil@megidish.net. And I love writing / rewriting / reverse engineering games.

Graphics

Page 11: Gil Megidish gil@megidish.net. And I love writing / rewriting / reverse engineering games.

Framebuffer (raw)

0,0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,x

1,0 1,1 1,2 1,3 1,4 1,5 1,6 1,7 1,x

y,0 y,1 y,2 y,3 y,4 y,5 y,6 y,7 y,x

x

y…

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Page 12: Gil Megidish gil@megidish.net. And I love writing / rewriting / reverse engineering games.
Page 13: Gil Megidish gil@megidish.net. And I love writing / rewriting / reverse engineering games.

Tile + Sprite Memory

Page 14: Gil Megidish gil@megidish.net. And I love writing / rewriting / reverse engineering games.
Page 15: Gil Megidish gil@megidish.net. And I love writing / rewriting / reverse engineering games.

Scene Graph

Placeholder For Future Presentation

Page 16: Gil Megidish gil@megidish.net. And I love writing / rewriting / reverse engineering games.
Page 17: Gil Megidish gil@megidish.net. And I love writing / rewriting / reverse engineering games.

Canvas is KingCanvas is King

Page 18: Gil Megidish gil@megidish.net. And I love writing / rewriting / reverse engineering games.

DEMO TIME!

Page 19: Gil Megidish gil@megidish.net. And I love writing / rewriting / reverse engineering games.

Three Demos To Rule Them All

Framebuffer demo

http://www.megidish.net/apple2js/

Sprites demo

http://www.megidish.net/alphageeks6/luigi/

Vector graphics demo

http://www.megidish.net/awjs/

Page 20: Gil Megidish gil@megidish.net. And I love writing / rewriting / reverse engineering games.

Catch me a canvas

<canvas id=“graphics” width=“640” height=“480”>Guru Meditation: No canvas supported!

</canvas>

var canvas = document.getElementById(“graphics”);var context = canvas.getContext(“2d”);

Page 21: Gil Megidish gil@megidish.net. And I love writing / rewriting / reverse engineering games.
Page 22: Gil Megidish gil@megidish.net. And I love writing / rewriting / reverse engineering games.

Drawing Primitives

ctx.fillStyle = “#c80000"; ctx.fillRect (10, 10, 55, 50);

ctx.fillStyle = "rgba(0, 0, 200, 0.5)"; ctx.fillRect (30, 30, 55, 50);

Other drawing methods: arc, bezierCurve, lineTo, quadraticCurve, rect, stroke, fillText, strokeText, beginPath/closePath and fill

Page 23: Gil Megidish gil@megidish.net. And I love writing / rewriting / reverse engineering games.

(but who needs that ?)

Page 24: Gil Megidish gil@megidish.net. And I love writing / rewriting / reverse engineering games.

Drawing Images

var sprite = new Image();sprite.src = “luigi.png”;

var x = 0, y = 0;ctx.drawImage(sprite, x, y);

Page 25: Gil Megidish gil@megidish.net. And I love writing / rewriting / reverse engineering games.

Drawing Images 2var spritemap = new Image();spritemap.src = “sprite-map.png”;

ctx.drawImage(spritemap,sx, sy,sw, sh,dx, dy,dw, dh

);

Sprite maps save loading time by fewer requests and better compression. drawImage() also provides scaling and cropping.

Page 26: Gil Megidish gil@megidish.net. And I love writing / rewriting / reverse engineering games.

Going Crazy With Images

// context state checkpointctx.save();

ctx.translate(0, 80);ctx.rotate(-45 * Math.PI / 180.0);ctx.scale(3.0, 1.0);ctx.drawImage(luigi, 0, 0);

// revert all context changesctx.restore();

Page 27: Gil Megidish gil@megidish.net. And I love writing / rewriting / reverse engineering games.

Accessing Pixels

var block = ctx.getImageData(sx, sy, sw, sh);block = {

width: width in pixels,height: height in pixels,data: array of 4*width*height bytes

};

Alternatively: ctx.createImageData(w, h);

Page 28: Gil Megidish gil@megidish.net. And I love writing / rewriting / reverse engineering games.

Accessing Pixels

var block = ctx.getImageData(0, 0, canvas.width/2, canvas.height);for (var y=0; y<block.height; y++) {

for (var x=0; x<block.width; x++) {

block.data[(y*block.width+x)*4+0] ^= 0xff;block.data[(y*block.width+x)*4+1] ^= 0xff;block.data[(y*block.width+x)*4+2] ^= 0xff;

}}

ctx.putImageData(block, 0, 0);

Page 29: Gil Megidish gil@megidish.net. And I love writing / rewriting / reverse engineering games.

Why Access Pixels ?

Complicated things impossible without putImageData()

Read image pixels getImageData combined with primitive drawing = save image to disk!

These examples are available to http://www.chromeexperiments.com/

Page 30: Gil Megidish gil@megidish.net. And I love writing / rewriting / reverse engineering games.

The Jazz Singer

Page 31: Gil Megidish gil@megidish.net. And I love writing / rewriting / reverse engineering games.

Let There Be Sound!

<audio id=“sfx001” src=“/mp3/boom.mp3”></audio>$(“sfx001”).play();

Page 32: Gil Megidish gil@megidish.net. And I love writing / rewriting / reverse engineering games.

Let There Be Sound!

<audio id=“sfx001” src=“/mp3/boom.mp3”></audio>$(“sfx001”).play();

Other methods:$(“sfx001”).pause();

Other attributes:$(“sfx001”).currentTime = 35.0;$(“sfx001”).volume = 0.5; $(“sfx001”).duration (read only)

Page 33: Gil Megidish gil@megidish.net. And I love writing / rewriting / reverse engineering games.

Putting It All Together

Page 34: Gil Megidish gil@megidish.net. And I love writing / rewriting / reverse engineering games.

Typical Game Loop

function gameTick(){

processKeyboard();moveEnemies();drawGraphics();updateAudio();

}

var fps = 60;setInterval(gameTick, 1000 / fps);

Page 35: Gil Megidish gil@megidish.net. And I love writing / rewriting / reverse engineering games.

The Future is Upon Us!

Page 36: Gil Megidish gil@megidish.net. And I love writing / rewriting / reverse engineering games.

Quake2 HTML5

Page 37: Gil Megidish gil@megidish.net. And I love writing / rewriting / reverse engineering games.

What’s Coming Up Next• WebGL

– OpenGL interface for Javascript– As of May, 2010: good luck finding a stable browser!

• WebSocket– UDP and nonblocking transport layer – Not there yet! (KAAZING?)

• WebStorage– Save games?

Page 38: Gil Megidish gil@megidish.net. And I love writing / rewriting / reverse engineering games.

Code Like It’s 2020!

ftw!‘s

Blackberry coming June 1st!

Page 39: Gil Megidish gil@megidish.net. And I love writing / rewriting / reverse engineering games.

Q&A

Page 40: Gil Megidish gil@megidish.net. And I love writing / rewriting / reverse engineering games.

Q&A

• Yes! You can use <canvas> in Internet Explorer 6?

<!--[if IE]><script type="text/javascript“ src="/js/excanvas.js"></script>

<![endif]-->

PS. Remember to upgrade your mother’s IE!

Page 41: Gil Megidish gil@megidish.net. And I love writing / rewriting / reverse engineering games.

Links!

• Chrome Experiments: Not Your Momma’s JS– http://www.chromeexperiments.com

• Appcelerator’s Titanium– www.appcelerator.com

• Box 2D: real time physics for JS games– http://box2d-js.sourceforge.net/index2.html

• Mozilla’s Canvas tutorial– https://developer.mozilla.org/en/Canvas_tutorial

Page 42: Gil Megidish gil@megidish.net. And I love writing / rewriting / reverse engineering games.
Page 43: Gil Megidish gil@megidish.net. And I love writing / rewriting / reverse engineering games.

GO MAKE GAMES!GO MAKE GAMES!

http://www.megidish.net


Recommended