1 / 43

<games />

<games />. Gil Megidish gil@megidish.net. And I love writing / rewriting / reverse engineering games. What The Heck is HTML5. Canvas. Selectors. Video. Validation. Audio. File API. Web Sockets. Semantic Elements. Web Storage. Web Worker. Web Database. Games + Javascript?. = wtf.

mervyn
Download Presentation

<games />

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. <games /> Gil Megidish gil@megidish.net

  2. And I love writing / rewriting / reverse engineering games

  3. What The Heck is HTML5 Canvas Selectors Video Validation Audio File API Web Sockets Semantic Elements Web Storage Web Worker Web Database

  4. Games + Javascript? = wtf

  5. 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

  6. 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

  7. Anatomy of a Game LOGIC GRAPHICS INPUT SOUND MUSIC MULTIPLAYER GAME ASSETS

  8. Anatomy of a Game LOGIC javascript code GRAPHICS <canvas> INPUT onkeydown, onmousedown SOUND <audio> MUSIC <audio> MULTIPLAYER ajax, WebSocket GAME ASSETS Images, Audio, Video and Binary supported by browsers

  9. Graphics

  10. Framebuffer (raw) x y 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

  11. Tile + Sprite Memory

  12. Scene Graph Placeholder For Future Presentation

  13. Canvas is King

  14. DEMO TIME!

  15. 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/

  16. 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”);

  17. 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

  18. (but who needs that ?)

  19. Drawing Images var sprite = new Image(); sprite.src = “luigi.png”; var x = 0, y = 0; ctx.drawImage(sprite, x, y);

  20. Drawing Images 2 var 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.

  21. Going Crazy With Images // context state checkpoint ctx.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 changes ctx.restore();

  22. 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);

  23. 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);

  24. Why Access Pixels ? Complicated things impossible without putImageData() getImageData combined with primitive drawing = save image to disk! Read image pixels These examples are available to http://www.chromeexperiments.com/

  25. The Jazz Singer

  26. Let There Be Sound! <audio id=“sfx001” src=“/mp3/boom.mp3”></audio> $(“sfx001”).play();

  27. 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)

  28. Putting It All Together

  29. Typical Game Loop function gameTick() { processKeyboard(); moveEnemies(); drawGraphics(); updateAudio(); } var fps = 60; setInterval(gameTick, 1000 / fps);

  30. The Future is Upon Us!

  31. Quake2 HTML5

  32. 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?

  33. Code Like It’s 2020! ftw! ‘s Blackberry coming June 1st!

  34. Q&A

  35. 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!

  36. 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

  37. GO MAKE GAMES! http://www.megidish.net

More Related