SlideShare uma empresa Scribd logo
1 de 81
Baixar para ler offline
E S
                         M ipt
                        A Scr
                     G G va
               T IN       d Ja                                       es

             EA ML5 a    n
                                                                bH
                                                                  aw
                                                                    k


           CR      HT
                                                              Ro

               ith
                          W

Hi, I’m Rob Hawkes and I’m here today to talk about the technologies behind HTML5 and
JavaScript games.
I work at Mozilla, a non-profit fighting for a better Web. The same guys who make Firefox.

I’m pretty fond of Mozilla. So much so that my girlfriend made me a chicken and leek pie with
extra Firefox goodness.

It was delicious.
Before we move on I just have a quick disclaimer.

This whole talk is about HTML5 and JavaScript as technologies used in the creation of games.

They’re technologies that are intrinsically linked to each other by nature, but saying HTML5
and JavaScript every single time makes my head hurt.

So instead I’ll just be saying HTML5.

Just bear in mind that whenever I mention HTML5 I’m also referring to JavaScript as well.
nt
                                                  orta
                                                p        ns
                                           im y rea    so
                                     a re          an
                                  es        er
                                               form
                                am       att
                               G     eym
                                            Th



Now I think it’s safe to say that games are pretty important, for many reasons.
sa  l
                                                    e r
                                              n iv            ne
                                             u             yo
                                       a  re       for
                                                       ever
                                    es        am
                                                 e
                                  am e is a g
                                 G     er
                                               Th



One of those reasons is that they are universal.

There are games out there to suit all walks of life; whether that’s a board game, card game,
or computer game. It’s all the same.

Over the years, I’ve played all sorts of games that each meant something different to me at
that point in life.
It’s memories from games like Paperboy on the ZX Spectrum and its amazing noises and epic
loading times.

I sorely miss those days.
And Bomberman on the SNES, which really got me addicted to gaming.
And Lylat Wars on the Nintendo 64. Star Fox for the non-European folk.

Do a barrel roll!
And the original Sim City.

I don’t bare think about the hours I lost to that game, building a city on what I’ve only just
noticed was an incredibly muddy landscape.
And Red Alert, one of the first games I owned that let me play with others over the Internet. It
was great fun!

And probably one of my all-time favourites, along with the original Command and Conquer.

Plus, it had an awesome soundtrack.
fu  n
                                                   n
                                                 m them
                                             d a
                                      a re        ple
                                                      ha
                                                        te
                                   es         )peo
                                 am      (sa
                                            ne
                                G     No




Another reason is that they are incredibly fun to play.

This is probably because they tap in to to our addictive, competitive personalities.

I don’t know anyone who hates games.
However, I do know people who hate fruit. A lot.

One of my favourite games at the moment is Fruit Ninja on the Kinect.

It pretty much justifies the Kinect’s existence.

I had a few friends over the other week and we all ended the weekend with Fruit Ninja-related
injuries.

It was worth it though.
Trailer for Fruit Ninja - http://www.youtube.com/watch?v=UzsmDfKzk7M
ie s
                                                    a r
                                               n  d         re
                                          o  u            wa
                                   h    b            rh
                                                       ard
                               u  s           , fa
                                                  ste
                            s p           tter
                          me        er,
                                        be
                        Ga      Bigg



Aside from being universal and fun, games are important because they push the boundaries
of what’s possible with today’s technology.

Games are one of the only things that deliberately use every ounce of your computer’s
capabilities; from graphics, to processing power, to RAM, even to disk space.

As computers constantly get better, games improve to use up the new improvements in
speed and power.

And computer hardware is improved, in part, because of the desire to create faster and more
realistic games.
2011
                                                                             2002




For example, this is Battlefield 3. It’s one of the most powerful and ‘realistic’ games out to
date.

It came out in 2011.

Compare that to Battlefield 1942, which came out back in 2002.

Notice the difference? There’s barely 9 years between them and yet it’s quite clear that
Battlefield 3 is far superior, at least visually.
Minimum specs

                      2400

                                                                                      2000




            500                                       512

                                                                           128
                                            32

           Processor (Mhz)                  Graphics (MB)                      RAM (MB)

                         Battlefield 1942 (2002)            Battlefield 3 (2011)



Just take a look at the minimum hardware specs of Battlefield 1942 and Battlefield 3.

In just 9 years we’ve pushed computers so far that the minimum requirement for a game
today is way beyond what was even possible back in 2002.
Recommended specs
                                                                                                  4000




                    2400       2400
                                                                                        2000



                                                              1024

          500                                       512

                                         32                                   128

            Processor (Mhz)                   Graphics (MB)                         RAM (MB)

             Battlefield 1942 (2002)   Battlefield 3 (2011)          Battlefield 3 - Recommended (2011)



And the minimum specs don’t even produce anything near the quality that you saw on the
previous slide.

For that you need even more powerful hardware.

These are the recommended specs for Battlefield 3. Aside from processor speed, they are at
least double everything else.

We’re talking state of the art technology here, and even this still won’t run the game at its full
potential.
e b
                                                       r W
                                                   ette mance
                                                a b      erfor

                            ean                        tte
                                                          rp
                                                     be
                       s m                      sa
                                                  nd
                      e
                     m w                   atu
                                              re
                   Ga    Ne
                                         fe



We now have more and faster processors than ever before, we have insanely powerful
graphics cards, and so much RAM we don’t know what to do with it.

The improvements that games help bring about in computer hardware mean that we can now
do some really cool stuff on the Web.

Without games, there would be little need to continue pushing Web technologies; like faster
JavaScript, or hardware accelerated CSS and multimedia rendering.
e s
                                                   ga m
                                             o re        orw
                                                            ard
                                           m         ovef
                                       lay        bm
                                      P     the
                                                We
                                          lping
                                        he
                                     re
                                   ua
                                 Yo

So in a rather long-winded way, my point here is that you need to play more games.

You’re making the Web better and having fun at the same time. Win win!
es
                                                       g a m
                                                  ing            ples
                                               ist           exam
                                             Ex      he
                                                        be
                                                          st
                                                      ft
                                                    eo
                                                 Som




The number of HTML5 games out there is growing every day.

I’d like to show you a selection of my favourites, just a tiny amount of what’s out there.
Quake II




Fully-functional multiplayer Quake II port.

http://code.google.com/p/quake2-gwt-port/
Cut The Rope

Cut The Rope, ported from iOS.

http://www.cuttherope.ie
Bejeweled

Bejeweled is a massively popular game on a whole variety of platforms.

Popcap recently released a purely HTML5 version.

http://bejeweled.popcap.com/html5
Command & Conquer

Command & Conquer: Tiberium Alliances is a HTML5 game from EA that is part real-time
strategy, part Farmville.

http://alliances.commandandconquer.com
GT Racing




GT Racing: Motor Academy is a 3D racing game by Gameloft and Mandreel.

http://www.mandreel.com/?page_id=1312
BrowserQuest




BrowserQuest is a massively-multiplayer RPG that Mozilla recently launched to the public.

It works great on mobile and desktop devices but what’s even better is that, aside from being
an addictive game, the entire source code is on GitHub.

http://browserquest.mozilla.org
https://github.com/mozilla/BrowserQuest
http://hacks.mozilla.org/2012/03/browserquest/
g y
                                                        o lo
                                                     chn        ick
                                                    e         st
                                                   T     5g
                                                           am
                                                             e
                                                     ML
                                                   HT
                                              akes
                                            tm
                                        ftha
                                    stuf
                                The

There are key technologies that are involved in the development of HTML5 games like the
ones you just saw.

I’m going highlight a few of my favourites.
vas
                                                             an
                                                            C    tfo
                                                                    rm
                                                                    pla
                                                                ics
                                                            raph
                                                           g
                                                      2D




Canvas is a 2D bitmap graphics platform.

It’s quite amazing what can be done with such simple drawing and image manipulation tools.

In games this is used to do things like drawing sprites and performing image manipulation
on the fly.

https://developer.mozilla.org/en/HTML/Canvas
Silk is a stunning example of what can be achieved by combining the simple drawing tools
available in canvas.

http://weavesilk.com
Close Pixelate is a canvas app that lets you manipulate images on–the-fly to create a
pixelated effect.

http://desandro.com/resources/close-pixelate/
You can even use canvas just for simple effects on a standard Web page.

David Desandro uses canvas to draw curved lines on his portfolio that indicate areas of focus.
Before canvas you’d have had to have used static images or complex techniques to achieve
this.

http://desandro.com/portfolio/
Last year I helped HTML5 Doctor implement a canvas-based rollover effect on their element
index.

With canvas, we were able to create custom-shaped rollovers that were entirely dynamic.

We also cached these canvas-generated images so they didn’t need to be created on every
page load.

http://html5doctor.com
Canvas




     <canvas id='myCanvasElement' width='400' height='400'></canvas>




Using canvas is very straight forward.

The first thing you need to do is add a canvas DOM element to your HTML page.
Canvas

    var canvas = document.getElementById('myCanvasElement');  
    var ctx = canvas.getContext('2d');


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




From there you can then access the canvas through JavaScript to draw on it and do other cool
stuff.

This is small canvas demo that draws a solid red square underneath a blue one with half
transparency.

‘myCanvasElement’ refers to a HTML <canvas> element that you’ll need to place in your
HTML file somewhere. In this example, I’m assuming that you’ve already done that.
GL
                                                              eb
                                                             W phics
                                                               ra
                                                           tedg
                                                         ra
                                                    ccele
                                                area
                                            ardw
                                           H



WebGL brings the ability to provide hardware-accelerated graphics directly within the
browser.

Games use this to create immersive 3D worlds and models, or for faster 2D graphics.

https://developer.mozilla.org/en/WebGL
HelloRacer is a little game that lets you drive a Formula One car around your browser. It’s a
beautiful example of WebGL in action.

http://helloracer.com/webgl/
Rome is a music video created with WebGL. It’s an amazing example of what the technology
can achieve in a real-world situation given a large team.

http://ro.me
Tinkercad is probably the best use of WebGL that I’ve seen in a production situation.

It’s a Web app that allows you to create 3D objects in your browser using WebGL, then get
them printed and sent to your doorstep in just a few simple clicks. It’s seriously awesome.

https://tinkercad.com
Eve Online WebGL ship viewer.

http://www.eveonline.com/universe/spaceships/
Both Google Maps and Nokia have recently added support for WebGL. The Nokia version is
particularly impressive because they fully render and texture 3D shapes of buildings.

http://support.google.com/maps/bin/answer.py?hl=en&answer=1630790
http://maps.nokia.com/webgl/
Undulating monkey by Paul Lewis.

http://lab.aerotwist.com/webgl/undulating-monkey/
I’m not going to lie, WebGL isn’t the easiest thing to learn. Then again, no raw 3D code is
that simple.

Instead, I recommend checking out a library called three.js which abstracts WebGL and makes
it much easier to implement.

https://github.com/mrdoob/three.js/
m   e
                                        Fra
                                      on           ps
                                   ati    ati
                                             on
                                                loo

                               nim d anim
                           estA timise
                         qu      Op
                       re

requestAnimationFrame is the new, better way of managing animation in JavaScript.

Instead of constantly running a setTimeout or setInterval function, which lack performance
and spike CPU usage, requestAnimationFrame puts the browser in control of things and
keeps things running smoothly.

https://developer.mozilla.org/en/DOM/window.requestAnimationFrame
requestAnimationFrame

    function update(timestamp) {  
      // DO SOMETHING


      window.mozRequestAnimationFrame(update);  
    }
     
    window.mozRequestAnimationFrame(update);




In this example, I’m only using the Mozilla prefixed version of requestAnimationFrame. In
reality, there’s a really good shim by Paul Irish that handles cross-browser
requestAnimationFrame.

http://paulirish.com/2011/requestanimationframe-for-smart-animating/
d io
                                                    a  u
                                                 L5          usic
                                               TM       nd
                                                           m
                                              H     grou
                                                         ck
                                                       ba
                                                    nd
                                                ctsa
                                            effe
                                      nd
                                   Sou


HTML5 audio allows for plugin-less audio.

For games, this would be used for sound effects and background music.

Audio data APIs implemented by Mozilla and Google allow for manipulation of audio and
much more fine-grained control.

https://developer.mozilla.org/en/HTML/Element/audio
https://developer.mozilla.org/en/Introducing_the_Audio_API_Extension
This is something I made especially for the ASSEMBLY 2011 event in Finland.

It’s an audio visualiser that uses WebGL and the HTML5 Audio Data API.

http://robhawkes.github.com/webgl-html5-audio-visualiser/
Canvas.fm uses Soundcloud, the Audio Data API and canvas to render music as it plays.

http://canvas.fm
Audio



     <audio id='myAudioElement' controls>
       <source src='audiofile.ogg' type='audio/ogg'>
     </audio>




Like canvas, using audio is also straight forward.

The first thing you need to do is add an audio DOM element to your HTML page.
Audio


    var audio = document.getElementById('myAudioElement');


    audio.play();


    audio.pause();




From there you can then access the audio element through JavaScript to control it.
ge
                                                           ra
                                                       to kies
                                                  cal s coo
                                                Lo        than
                                                      ore
                                                       gm
                                                  torin
                                                 S




Methods like the application cache, Local Storage, and IndexedDB are great for storing
relatively large quantities of data locally.

This way you can cache data and allow the website to pick up where the user left off.

https://developer.mozilla.org/en/DOM/Storage
https://developer.mozilla.org/en/Offline_resources_in_Firefox
https://developer.mozilla.org/en/IndexedDB
e ts
                                                      ock
                                                    bS       ation
                                                   e
                                                  W omm  un
                                                           ic

                                                       yerc
                                                 ltipla
                                               Mu




WebSockets can be used for the real-time communication between a browser client and
server.

For games, this would be used for fast-paced multiplayer functionality.

https://developer.mozilla.org/en/WebSockets
GoSquared use WebSockets for real-time website analytics.

http://www.gosquared.com
WebSockets


    var ws = new WebSocket('http://example.com/socketserver');


    ws.send('This message is sent to the WebSocket server');


    ws.onmessage = function (event) {  
      console.log(event.data);  
    }




WebSockets are created entirely from JavaScript without the need to add elements to the
HTML page.

A new WebSocket connection can be opened by calling the ‘new WebSocket’ constructor and
passing it the URL to the WebSocket server.

From there you can call the ‘send’ method to push data to the server.

Or listen for the ‘onmessage’ event to handle data pushed to you from the server.
e  rs
                                                     ork
                                                  b W      aS
                                                             cript
                                                 e
                                                W eaded Jav

                                                      i-thr
                                                  Mult




Web Workers allow you to run JavaScript in separate background threads.

This allows you to offload computationally-heavy tasks with a single worker, or tackle large
quantities of data in a fraction of the time by spreading tasks over multiple workers.

Another benefit of doing this is that you don’t lock up the browser during heavy tasks,
meaning a user can still interact with things and get stuff done.

https://developer.mozilla.org/En/Using_web_workers
Web Workers


    var worker = new Worker('my-worker.js');


    worker.onmessage = function(event) {  
     console.log('Worker message: ' + event.data);  
    };




Web Workers, like WebSockets, are created entirely through JavaScript.

You create a new worker by calling the ‘new Worker’ constructor and passing it the path to a
JavaScript file.

You can then listen to the ‘onmessage’ event that will be fired every time the worker script
sends data using a ‘postMessage’ method.
PI
                                                          n  A
                                                    re  e           ul
                                                 Sc             we
                                                                  rf
                                             ull           et
                                                              po
                                            F      im
                                                      ple
                                                         ,y
                                                        S




The Full Screen API allows you to expand any HTML element to fill the users screen, even if
the browser isn’t running full screen itself.

For games, this is great because you can make the small canvas element fill the entire screen.

Outside of games, this is useful for video elements and Web applications.

https://bugzilla.mozilla.org/show_bug.cgi?id=545812
http://blog.pearce.org.nz/2011/09/mozilla-full-screen-api-progress-update.html
https://wiki.mozilla.org/Platform/Features/Full_Screen_APIs
Full Screen API

    var canvas = document.getElementById('myCanvasElement');


    if (canvas.requestFullscreen) {
        canvas.requestFullscreen();
    } else if (canvas.mozRequestFullScreen) {
        canvas.mozRequestFullScreen();
    } else if (canvas.webkitRequestFullScreen) {
        canvas.webkitRequestFullScreen();
    }



The Full Screen API can be requested from any DOM element.

In this example you’re asking a canvas element to expand to fill the screen.

One thing to note is that you can’t just make any element fill the screen whenever you want.
Right now, the user has to click or press a key to initiate the Full Screen API.
P  I
                                                          A
                                                    o ck ace
                                                r L           pl
                                              te           ne
                                           oin      rso
                                                       rino
                                          P       cu
                                                     he
                                                   gt
                                              ockin
                                             L



The Pointer Lock API is an attempt at improving the mouse as an input device.

It would be used in situations like games and 3D visualisations where the mouse position
rotates or moves you around a 3D space.

As it stands there’d still be a cursor moving around the screen causing all sorts of trouble
when you want to click on something in your game.

With the new API you can lock your mouse position and stop it from getting in the way and
being a nuisance.

This is available in both Firefox and Chrome.

https://bugzilla.mozilla.org/show_bug.cgi?id=633602
P I
                                                          d A
                                                     p a           eb
                                                   me         he
                                                                 W
                                                 Ga      et
                                                            ot
                                                       ol
                                                     ns co
                                                     he
                                                   gt
                                                gin
                                            Brin



The Gamepad API is one of the major improvements to input that is coming.

Both Mozilla and Google are working an an implementation of this and there is actually an
experimental build of Firefox available to the public that has it working. The API is also in the
dev build of Chrome.

What I find most interesting about the Gamepad API is that it might be just the thing we need
to finally justify HTML5 gaming on a TV or console.

Who wants to use a keyboard and mouse while sitting on the sofa?

https://wiki.mozilla.org/GamepadAPI
http://www.gamepadjs.com
https://github.com/jbuck/input.js
This is a little demo that I put together to show off the Gamepad API implemented in my
game Rawkets.
P  I
                                                   n   A
                                             a t io            es
                                          n t             de
                                                            vic
                                     ri e           ob
                                                      ile
                                  n O          on
                                                  m

                               ree        ha
                                            ve
                             Sc     M ust-




The Screen Orientation API allows you to do things like changing and locking, you guessed it,
the orientation of the screen.

Before now, it’s been incredibly difficult to lock orientation on a website or game using
nothing but JavaScript.

https://bugzilla.mozilla.org/show_bug.cgi?id=740188
http://dvcs.w3.org/hg/screen-orientation/raw-file/default/Overview.html
Screen Orientation API



     if (screen.mozLockOrientation) {
       screen.mozLockOrientation('landscape');
     }




The Screen Orientation API is another relatively simple one.

It just landed in Firefox Nightly on mobile.

All you need to do is call the ‘lockOrientation’ method of the screen object and pass it a
orientation string.

It’s important to note that you also need to be using the Full Screen API for the orientation
lock to work.
e.js
                                                              od
                                                             N    cation
                                                                   uni
                                                                  m
                                                               com
                                                     rk
                                                 etwo
                                               dn
                                             an
                                         gic
                                   ver lo
                                Ser

Node is often used as a multiplayer game server, controlling the logic and handling the
WebSockets connections to the players.

It can be used for player authentication and the storage of data so gameplay can persist over
multiple game sessions.

This is all made relatively easy with great third-party modules, like Socket.IO for WebSockets,
and others that handle Redis and MongoDB for storage, for example.

http://nodejs.org
n s
                                                      tio
                                               plica bsite
                                             ap         yw
                                                          e
                                          eb     ta
                                                    fanc
                                         W ot jus
                                                     N




The concept of Web apps is something that is gaining a lot of traction at the moment.

It’s no doubt this this traction is as a result of the success of native applications and games
on the desktop and mobile, particularly with iOS and Android.

https://developer.mozilla.org/en/Apps
nce
                                                            erie
                                                         exp      scre
                                                                      en

                                         like                  ho
                                                                 me
                                       p-                op
                                                            or
                                     Ap              eskt
                                                 thed
                                       from
                                    ch
                                  un
                                La

Something that needs to be tackled with Web apps is how to make them feel like real
applications rather than glorified websites.

One way that is being considered is completely removing the browser chrome and running
the application in it’s own window.

This will effectively mean that you have full control of the app UI and it won’t look like it’s
being run in a browser.
At Mozilla we call this WebRT, which stands for Web Run-Time.

By using WebRT you can install a Web app directly into the OS just like you would a native
application.

The WebRT app will look and feel like a native application when launched but will actually be
running a browser rendering engine behind the scenes.

This is an example of my game Rawkets running as a WebRT app with the Firefox rendering
engine. Notice the lack of browser UI.

https://developer.mozilla.org/en/Apps/Apps_architecture#Web_runtime
e s
                                                      gin
                                                  e n         ay
                                                e
                                               m game     st
                                                            od
                                             Ga
                                                  ML5
                                                     HT
                                                  te
                                              Crea




If you haven’t already then I encourage you to give HTML5 game development a go.

And you don't have to create an entire game infrastructure from scratch, you can use some of
the existing engines that are proving popular.
Impact. A 2D game engine.

I used this recently, and it’s really well made and has a good level editor and development
tools.

The documentation is great and the author is active and very helpful.

http://impactjs.com/
Crafty. Another 2D game engine.

It’s a free engine and is doing much better than other free engines out there.

http://craftyjs.com/
Isongenic Engine. A 2D to 2.5D game engine.

Massively multiplayer networking built in, uses Node and MongoDB, and has canvas or DOM-
based graphics.

http://www.isogenicengine.com
ing
                                                           ort e
                                                        & p      bas
                                      ion                        ec
                                                                   od
                                                                     e-

                                  vers                    a sin
                                                               gl

                                on       ing
                               C       Us




A lot of game developers want to target browsers but don’t want to rewrite their existing
games in JavaScript.

To help this process, various methods of converting an existing code-base to JavaScript are
starting to appear.

However, these methods also apply to non-games. Many people are now converting utility
scripts from native languages over to JavaScript. Things like SQLite, even Ruby!
Emscripten

https://github.com/kripken/emscripten/wiki
PlayN and Google Web Toolkit

https://developers.google.com/playn/
https://developers.google.com/web-toolkit/
PhoneGap

http://phonegap.com
u p
                                                              g
                                                            in zon
                                                         eep       ri
                                                        K      e ho
                                                                th
                                                          ff on
                                                        tu
                                                    uchs
                                                   m
                                                So



I’ve really only touched the tip of the iceberg here.

There is much more coming in the near future.

Here are a few ways to keep up with things and get yourself prepared, particularly the things
happening at Mozilla.
Are We Fun Yet?

https://wiki.mozilla.org/Platform/AreWeFunYet
Firefox Aurora

“Get a first look at the latest developer tools, security features and innovative HTML5 and
other Web technologies.”

http://www.mozilla.org/en-US/firefox/channel/#aurora
Firefox Nightly

Bleeding edge functionality.

Testing only.

http://nightly.mozilla.org
Foundation HTML5 Canvas

                                           Out now

                                           Paperback and digital formats

                                           Become a canvas master

                                           Learn how to animate

                                           Make two cool space games

                                           RAWKES.COM/FOUNDATIONCANVAS




Foundation HTML5 Canvas is out now on Amazon and other reputable book stores.

http://rawkes.com/foundationcanvas
HTML5 Games Most Wanted

                                           Out now

                                           Paperback and digital formats

                                           Learn from the best

                                           Various game-related tutorials

                                           Other tips and tricks

                                           APRESS.COM/9781430239789




HTML5 Games Most Wanted is out now on Amazon and other reputable book stores.

http://apress.com/9781430239789
O  U
                             Y s?
                            K tion
                           N ues
                          A Q
                        TH                                      R b
                                                                       es
                                                                     wk es
                                                                   Ha wk
                                                                 ob ha
                                                                  ro
                                                                 @




Thank you.

If you have any questions feel free to grab me, or bug me on Twitter (@robhawkes).

I’m a friendly chap and I’ll be happy to help.

Mais conteúdo relacionado

Destaque

The discovery of the atomic world and the constituents of matter
The discovery of the atomic world and the constituents of matterThe discovery of the atomic world and the constituents of matter
The discovery of the atomic world and the constituents of matterRochelle Forrester
 
CatDotNet - Farmville para SharePoint
CatDotNet - Farmville para SharePointCatDotNet - Farmville para SharePoint
CatDotNet - Farmville para SharePointEdin Kapic
 
Global trade in_malagasy_precious_woods
Global trade in_malagasy_precious_woodsGlobal trade in_malagasy_precious_woods
Global trade in_malagasy_precious_woodsZoely Mamizaka
 
Inglisuri barmenebistvis
Inglisuri barmenebistvisInglisuri barmenebistvis
Inglisuri barmenebistvisNam Nguyen
 
TeenLife Boston: Guide to Community Service 2012
TeenLife Boston: Guide to Community Service 2012TeenLife Boston: Guide to Community Service 2012
TeenLife Boston: Guide to Community Service 2012TeenLife
 
Repeat steroids for flm 2 (1)
Repeat steroids for flm 2 (1)Repeat steroids for flm 2 (1)
Repeat steroids for flm 2 (1)Asha Reddy
 
Eoffice eNetwork Directory 2013
Eoffice eNetwork Directory 2013Eoffice eNetwork Directory 2013
Eoffice eNetwork Directory 2013Pier Paolo Mucelli
 
Prehled firem a investic v CR - 2010
Prehled firem a investic v CR - 2010Prehled firem a investic v CR - 2010
Prehled firem a investic v CR - 2010Innovation Tank
 
KB Seminars: Growing Your Online Business; 03/12
KB Seminars: Growing Your Online Business; 03/12KB Seminars: Growing Your Online Business; 03/12
KB Seminars: Growing Your Online Business; 03/12MDIF
 
Program 2010
Program 2010Program 2010
Program 2010YWCARO
 
Aircraft IT MRO eJournal "eSignatures" How I See IT
Aircraft IT MRO eJournal "eSignatures" How I See ITAircraft IT MRO eJournal "eSignatures" How I See IT
Aircraft IT MRO eJournal "eSignatures" How I See ITMichael Denis
 
Astronomers Returns to the Stratosphere
Astronomers Returns to the StratosphereAstronomers Returns to the Stratosphere
Astronomers Returns to the StratosphereSean Casey, USRA
 
Ayuda migracion
Ayuda migracion Ayuda migracion
Ayuda migracion BartOc3
 
Zahtz portfolio
Zahtz portfolioZahtz portfolio
Zahtz portfolioSenserit
 

Destaque (15)

The discovery of the atomic world and the constituents of matter
The discovery of the atomic world and the constituents of matterThe discovery of the atomic world and the constituents of matter
The discovery of the atomic world and the constituents of matter
 
CatDotNet - Farmville para SharePoint
CatDotNet - Farmville para SharePointCatDotNet - Farmville para SharePoint
CatDotNet - Farmville para SharePoint
 
Better care fund Helen Bevan
Better care fund Helen BevanBetter care fund Helen Bevan
Better care fund Helen Bevan
 
Global trade in_malagasy_precious_woods
Global trade in_malagasy_precious_woodsGlobal trade in_malagasy_precious_woods
Global trade in_malagasy_precious_woods
 
Inglisuri barmenebistvis
Inglisuri barmenebistvisInglisuri barmenebistvis
Inglisuri barmenebistvis
 
TeenLife Boston: Guide to Community Service 2012
TeenLife Boston: Guide to Community Service 2012TeenLife Boston: Guide to Community Service 2012
TeenLife Boston: Guide to Community Service 2012
 
Repeat steroids for flm 2 (1)
Repeat steroids for flm 2 (1)Repeat steroids for flm 2 (1)
Repeat steroids for flm 2 (1)
 
Eoffice eNetwork Directory 2013
Eoffice eNetwork Directory 2013Eoffice eNetwork Directory 2013
Eoffice eNetwork Directory 2013
 
Prehled firem a investic v CR - 2010
Prehled firem a investic v CR - 2010Prehled firem a investic v CR - 2010
Prehled firem a investic v CR - 2010
 
KB Seminars: Growing Your Online Business; 03/12
KB Seminars: Growing Your Online Business; 03/12KB Seminars: Growing Your Online Business; 03/12
KB Seminars: Growing Your Online Business; 03/12
 
Program 2010
Program 2010Program 2010
Program 2010
 
Aircraft IT MRO eJournal "eSignatures" How I See IT
Aircraft IT MRO eJournal "eSignatures" How I See ITAircraft IT MRO eJournal "eSignatures" How I See IT
Aircraft IT MRO eJournal "eSignatures" How I See IT
 
Astronomers Returns to the Stratosphere
Astronomers Returns to the StratosphereAstronomers Returns to the Stratosphere
Astronomers Returns to the Stratosphere
 
Ayuda migracion
Ayuda migracion Ayuda migracion
Ayuda migracion
 
Zahtz portfolio
Zahtz portfolioZahtz portfolio
Zahtz portfolio
 

Mais de Robin Hawkes

ViziCities - Lessons Learnt Visualising Real-world Cities in 3D
ViziCities - Lessons Learnt Visualising Real-world Cities in 3DViziCities - Lessons Learnt Visualising Real-world Cities in 3D
ViziCities - Lessons Learnt Visualising Real-world Cities in 3DRobin Hawkes
 
Understanding cities using ViziCities and 3D data visualisation
Understanding cities using ViziCities and 3D data visualisationUnderstanding cities using ViziCities and 3D data visualisation
Understanding cities using ViziCities and 3D data visualisationRobin Hawkes
 
Calculating building heights using a phone camera
Calculating building heights using a phone cameraCalculating building heights using a phone camera
Calculating building heights using a phone cameraRobin Hawkes
 
WebVisions – ViziCities: Bringing Cities to Life Using Big Data
WebVisions – ViziCities: Bringing Cities to Life Using Big DataWebVisions – ViziCities: Bringing Cities to Life Using Big Data
WebVisions – ViziCities: Bringing Cities to Life Using Big DataRobin Hawkes
 
Understanding cities using ViziCities and 3D data visualisation
Understanding cities using ViziCities and 3D data visualisationUnderstanding cities using ViziCities and 3D data visualisation
Understanding cities using ViziCities and 3D data visualisationRobin Hawkes
 
ViziCities: Creating Real-World Cities in 3D using OpenStreetMap and WebGL
ViziCities: Creating Real-World Cities in 3D using OpenStreetMap and WebGLViziCities: Creating Real-World Cities in 3D using OpenStreetMap and WebGL
ViziCities: Creating Real-World Cities in 3D using OpenStreetMap and WebGLRobin Hawkes
 
Beautiful Data Visualisation & D3
Beautiful Data Visualisation & D3Beautiful Data Visualisation & D3
Beautiful Data Visualisation & D3Robin Hawkes
 
ViziCities: Making SimCity for the Real World
ViziCities: Making SimCity for the Real WorldViziCities: Making SimCity for the Real World
ViziCities: Making SimCity for the Real WorldRobin Hawkes
 
The State of WebRTC
The State of WebRTCThe State of WebRTC
The State of WebRTCRobin Hawkes
 
Bringing Cities to Life Using Big Data & WebGL
Bringing Cities to Life Using Big Data & WebGLBringing Cities to Life Using Big Data & WebGL
Bringing Cities to Life Using Big Data & WebGLRobin Hawkes
 
Mobile App Development - Pitfalls & Helpers
Mobile App Development - Pitfalls & HelpersMobile App Development - Pitfalls & Helpers
Mobile App Development - Pitfalls & HelpersRobin Hawkes
 
Boot to Gecko – The Web as a Platform
Boot to Gecko – The Web as a PlatformBoot to Gecko – The Web as a Platform
Boot to Gecko – The Web as a PlatformRobin Hawkes
 
Mozilla Firefox: Present and Future - Fluent JS
Mozilla Firefox: Present and Future - Fluent JSMozilla Firefox: Present and Future - Fluent JS
Mozilla Firefox: Present and Future - Fluent JSRobin Hawkes
 
The State of HTML5 Games - Fluent JS
The State of HTML5 Games - Fluent JSThe State of HTML5 Games - Fluent JS
The State of HTML5 Games - Fluent JSRobin Hawkes
 
HTML5 Technologies for Game Development - Web Directions Code
HTML5 Technologies for Game Development - Web Directions CodeHTML5 Technologies for Game Development - Web Directions Code
HTML5 Technologies for Game Development - Web Directions CodeRobin Hawkes
 
MelbJS - Inside Rawkets
MelbJS - Inside RawketsMelbJS - Inside Rawkets
MelbJS - Inside RawketsRobin Hawkes
 
Melbourne Geek Night - Boot to Gecko – The Web as a Platform
Melbourne Geek Night - Boot to Gecko – The Web as a PlatformMelbourne Geek Night - Boot to Gecko – The Web as a Platform
Melbourne Geek Night - Boot to Gecko – The Web as a PlatformRobin Hawkes
 
Hacking with B2G – Web Apps and Customisation
Hacking with B2G – Web Apps and CustomisationHacking with B2G – Web Apps and Customisation
Hacking with B2G – Web Apps and CustomisationRobin Hawkes
 
MDN Hackday London - Open Web Games with HTML5 & JavaScript
MDN Hackday London - Open Web Games with HTML5 & JavaScriptMDN Hackday London - Open Web Games with HTML5 & JavaScript
MDN Hackday London - Open Web Games with HTML5 & JavaScriptRobin Hawkes
 
MDN Hackday London - Boot to Gecko: The Future of Mobile
MDN Hackday London - Boot to Gecko: The Future of MobileMDN Hackday London - Boot to Gecko: The Future of Mobile
MDN Hackday London - Boot to Gecko: The Future of MobileRobin Hawkes
 

Mais de Robin Hawkes (20)

ViziCities - Lessons Learnt Visualising Real-world Cities in 3D
ViziCities - Lessons Learnt Visualising Real-world Cities in 3DViziCities - Lessons Learnt Visualising Real-world Cities in 3D
ViziCities - Lessons Learnt Visualising Real-world Cities in 3D
 
Understanding cities using ViziCities and 3D data visualisation
Understanding cities using ViziCities and 3D data visualisationUnderstanding cities using ViziCities and 3D data visualisation
Understanding cities using ViziCities and 3D data visualisation
 
Calculating building heights using a phone camera
Calculating building heights using a phone cameraCalculating building heights using a phone camera
Calculating building heights using a phone camera
 
WebVisions – ViziCities: Bringing Cities to Life Using Big Data
WebVisions – ViziCities: Bringing Cities to Life Using Big DataWebVisions – ViziCities: Bringing Cities to Life Using Big Data
WebVisions – ViziCities: Bringing Cities to Life Using Big Data
 
Understanding cities using ViziCities and 3D data visualisation
Understanding cities using ViziCities and 3D data visualisationUnderstanding cities using ViziCities and 3D data visualisation
Understanding cities using ViziCities and 3D data visualisation
 
ViziCities: Creating Real-World Cities in 3D using OpenStreetMap and WebGL
ViziCities: Creating Real-World Cities in 3D using OpenStreetMap and WebGLViziCities: Creating Real-World Cities in 3D using OpenStreetMap and WebGL
ViziCities: Creating Real-World Cities in 3D using OpenStreetMap and WebGL
 
Beautiful Data Visualisation & D3
Beautiful Data Visualisation & D3Beautiful Data Visualisation & D3
Beautiful Data Visualisation & D3
 
ViziCities: Making SimCity for the Real World
ViziCities: Making SimCity for the Real WorldViziCities: Making SimCity for the Real World
ViziCities: Making SimCity for the Real World
 
The State of WebRTC
The State of WebRTCThe State of WebRTC
The State of WebRTC
 
Bringing Cities to Life Using Big Data & WebGL
Bringing Cities to Life Using Big Data & WebGLBringing Cities to Life Using Big Data & WebGL
Bringing Cities to Life Using Big Data & WebGL
 
Mobile App Development - Pitfalls & Helpers
Mobile App Development - Pitfalls & HelpersMobile App Development - Pitfalls & Helpers
Mobile App Development - Pitfalls & Helpers
 
Boot to Gecko – The Web as a Platform
Boot to Gecko – The Web as a PlatformBoot to Gecko – The Web as a Platform
Boot to Gecko – The Web as a Platform
 
Mozilla Firefox: Present and Future - Fluent JS
Mozilla Firefox: Present and Future - Fluent JSMozilla Firefox: Present and Future - Fluent JS
Mozilla Firefox: Present and Future - Fluent JS
 
The State of HTML5 Games - Fluent JS
The State of HTML5 Games - Fluent JSThe State of HTML5 Games - Fluent JS
The State of HTML5 Games - Fluent JS
 
HTML5 Technologies for Game Development - Web Directions Code
HTML5 Technologies for Game Development - Web Directions CodeHTML5 Technologies for Game Development - Web Directions Code
HTML5 Technologies for Game Development - Web Directions Code
 
MelbJS - Inside Rawkets
MelbJS - Inside RawketsMelbJS - Inside Rawkets
MelbJS - Inside Rawkets
 
Melbourne Geek Night - Boot to Gecko – The Web as a Platform
Melbourne Geek Night - Boot to Gecko – The Web as a PlatformMelbourne Geek Night - Boot to Gecko – The Web as a Platform
Melbourne Geek Night - Boot to Gecko – The Web as a Platform
 
Hacking with B2G – Web Apps and Customisation
Hacking with B2G – Web Apps and CustomisationHacking with B2G – Web Apps and Customisation
Hacking with B2G – Web Apps and Customisation
 
MDN Hackday London - Open Web Games with HTML5 & JavaScript
MDN Hackday London - Open Web Games with HTML5 & JavaScriptMDN Hackday London - Open Web Games with HTML5 & JavaScript
MDN Hackday London - Open Web Games with HTML5 & JavaScript
 
MDN Hackday London - Boot to Gecko: The Future of Mobile
MDN Hackday London - Boot to Gecko: The Future of MobileMDN Hackday London - Boot to Gecko: The Future of Mobile
MDN Hackday London - Boot to Gecko: The Future of Mobile
 

Último

FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 

Último (20)

FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 

Geek Meet - Creating Games with HTML5 and JavaScript

  • 1. E S M ipt A Scr G G va T IN d Ja es EA ML5 a n bH aw k CR HT Ro ith W Hi, I’m Rob Hawkes and I’m here today to talk about the technologies behind HTML5 and JavaScript games.
  • 2. I work at Mozilla, a non-profit fighting for a better Web. The same guys who make Firefox. I’m pretty fond of Mozilla. So much so that my girlfriend made me a chicken and leek pie with extra Firefox goodness. It was delicious.
  • 3. Before we move on I just have a quick disclaimer. This whole talk is about HTML5 and JavaScript as technologies used in the creation of games. They’re technologies that are intrinsically linked to each other by nature, but saying HTML5 and JavaScript every single time makes my head hurt. So instead I’ll just be saying HTML5. Just bear in mind that whenever I mention HTML5 I’m also referring to JavaScript as well.
  • 4. nt orta p ns im y rea so a re an es er form am att G eym Th Now I think it’s safe to say that games are pretty important, for many reasons.
  • 5. sa l e r n iv ne u yo a re for ever es am e am e is a g G er Th One of those reasons is that they are universal. There are games out there to suit all walks of life; whether that’s a board game, card game, or computer game. It’s all the same. Over the years, I’ve played all sorts of games that each meant something different to me at that point in life.
  • 6. It’s memories from games like Paperboy on the ZX Spectrum and its amazing noises and epic loading times. I sorely miss those days.
  • 7. And Bomberman on the SNES, which really got me addicted to gaming.
  • 8. And Lylat Wars on the Nintendo 64. Star Fox for the non-European folk. Do a barrel roll!
  • 9. And the original Sim City. I don’t bare think about the hours I lost to that game, building a city on what I’ve only just noticed was an incredibly muddy landscape.
  • 10. And Red Alert, one of the first games I owned that let me play with others over the Internet. It was great fun! And probably one of my all-time favourites, along with the original Command and Conquer. Plus, it had an awesome soundtrack.
  • 11. fu n n m them d a a re ple ha te es )peo am (sa ne G No Another reason is that they are incredibly fun to play. This is probably because they tap in to to our addictive, competitive personalities. I don’t know anyone who hates games.
  • 12. However, I do know people who hate fruit. A lot. One of my favourite games at the moment is Fruit Ninja on the Kinect. It pretty much justifies the Kinect’s existence. I had a few friends over the other week and we all ended the weekend with Fruit Ninja-related injuries. It was worth it though.
  • 13. Trailer for Fruit Ninja - http://www.youtube.com/watch?v=UzsmDfKzk7M
  • 14. ie s a r n d re o u wa h b rh ard u s , fa ste s p tter me er, be Ga Bigg Aside from being universal and fun, games are important because they push the boundaries of what’s possible with today’s technology. Games are one of the only things that deliberately use every ounce of your computer’s capabilities; from graphics, to processing power, to RAM, even to disk space. As computers constantly get better, games improve to use up the new improvements in speed and power. And computer hardware is improved, in part, because of the desire to create faster and more realistic games.
  • 15. 2011 2002 For example, this is Battlefield 3. It’s one of the most powerful and ‘realistic’ games out to date. It came out in 2011. Compare that to Battlefield 1942, which came out back in 2002. Notice the difference? There’s barely 9 years between them and yet it’s quite clear that Battlefield 3 is far superior, at least visually.
  • 16. Minimum specs 2400 2000 500 512 128 32 Processor (Mhz) Graphics (MB) RAM (MB) Battlefield 1942 (2002) Battlefield 3 (2011) Just take a look at the minimum hardware specs of Battlefield 1942 and Battlefield 3. In just 9 years we’ve pushed computers so far that the minimum requirement for a game today is way beyond what was even possible back in 2002.
  • 17. Recommended specs 4000 2400 2400 2000 1024 500 512 32 128 Processor (Mhz) Graphics (MB) RAM (MB) Battlefield 1942 (2002) Battlefield 3 (2011) Battlefield 3 - Recommended (2011) And the minimum specs don’t even produce anything near the quality that you saw on the previous slide. For that you need even more powerful hardware. These are the recommended specs for Battlefield 3. Aside from processor speed, they are at least double everything else. We’re talking state of the art technology here, and even this still won’t run the game at its full potential.
  • 18. e b r W ette mance a b erfor ean tte rp be s m sa nd e m w atu re Ga Ne fe We now have more and faster processors than ever before, we have insanely powerful graphics cards, and so much RAM we don’t know what to do with it. The improvements that games help bring about in computer hardware mean that we can now do some really cool stuff on the Web. Without games, there would be little need to continue pushing Web technologies; like faster JavaScript, or hardware accelerated CSS and multimedia rendering.
  • 19. e s ga m o re orw ard m ovef lay bm P the We lping he re ua Yo So in a rather long-winded way, my point here is that you need to play more games. You’re making the Web better and having fun at the same time. Win win!
  • 20. es g a m ing ples ist exam Ex he be st ft eo Som The number of HTML5 games out there is growing every day. I’d like to show you a selection of my favourites, just a tiny amount of what’s out there.
  • 21. Quake II Fully-functional multiplayer Quake II port. http://code.google.com/p/quake2-gwt-port/
  • 22. Cut The Rope Cut The Rope, ported from iOS. http://www.cuttherope.ie
  • 23. Bejeweled Bejeweled is a massively popular game on a whole variety of platforms. Popcap recently released a purely HTML5 version. http://bejeweled.popcap.com/html5
  • 24. Command & Conquer Command & Conquer: Tiberium Alliances is a HTML5 game from EA that is part real-time strategy, part Farmville. http://alliances.commandandconquer.com
  • 25. GT Racing GT Racing: Motor Academy is a 3D racing game by Gameloft and Mandreel. http://www.mandreel.com/?page_id=1312
  • 26. BrowserQuest BrowserQuest is a massively-multiplayer RPG that Mozilla recently launched to the public. It works great on mobile and desktop devices but what’s even better is that, aside from being an addictive game, the entire source code is on GitHub. http://browserquest.mozilla.org https://github.com/mozilla/BrowserQuest http://hacks.mozilla.org/2012/03/browserquest/
  • 27. g y o lo chn ick e st T 5g am e ML HT akes tm ftha stuf The There are key technologies that are involved in the development of HTML5 games like the ones you just saw. I’m going highlight a few of my favourites.
  • 28. vas an C tfo rm pla ics raph g 2D Canvas is a 2D bitmap graphics platform. It’s quite amazing what can be done with such simple drawing and image manipulation tools. In games this is used to do things like drawing sprites and performing image manipulation on the fly. https://developer.mozilla.org/en/HTML/Canvas
  • 29. Silk is a stunning example of what can be achieved by combining the simple drawing tools available in canvas. http://weavesilk.com
  • 30. Close Pixelate is a canvas app that lets you manipulate images on–the-fly to create a pixelated effect. http://desandro.com/resources/close-pixelate/
  • 31. You can even use canvas just for simple effects on a standard Web page. David Desandro uses canvas to draw curved lines on his portfolio that indicate areas of focus. Before canvas you’d have had to have used static images or complex techniques to achieve this. http://desandro.com/portfolio/
  • 32. Last year I helped HTML5 Doctor implement a canvas-based rollover effect on their element index. With canvas, we were able to create custom-shaped rollovers that were entirely dynamic. We also cached these canvas-generated images so they didn’t need to be created on every page load. http://html5doctor.com
  • 33. Canvas <canvas id='myCanvasElement' width='400' height='400'></canvas> Using canvas is very straight forward. The first thing you need to do is add a canvas DOM element to your HTML page.
  • 34. Canvas var canvas = document.getElementById('myCanvasElement');   var ctx = canvas.getContext('2d'); ctx.fillStyle = "rgb(200,0,0)";   ctx.fillRect(10, 10, 55, 50);      ctx.fillStyle = "rgba(0, 0, 200, 0.5)";   ctx.fillRect(30, 30, 55, 50); From there you can then access the canvas through JavaScript to draw on it and do other cool stuff. This is small canvas demo that draws a solid red square underneath a blue one with half transparency. ‘myCanvasElement’ refers to a HTML <canvas> element that you’ll need to place in your HTML file somewhere. In this example, I’m assuming that you’ve already done that.
  • 35. GL eb W phics ra tedg ra ccele area ardw H WebGL brings the ability to provide hardware-accelerated graphics directly within the browser. Games use this to create immersive 3D worlds and models, or for faster 2D graphics. https://developer.mozilla.org/en/WebGL
  • 36. HelloRacer is a little game that lets you drive a Formula One car around your browser. It’s a beautiful example of WebGL in action. http://helloracer.com/webgl/
  • 37. Rome is a music video created with WebGL. It’s an amazing example of what the technology can achieve in a real-world situation given a large team. http://ro.me
  • 38. Tinkercad is probably the best use of WebGL that I’ve seen in a production situation. It’s a Web app that allows you to create 3D objects in your browser using WebGL, then get them printed and sent to your doorstep in just a few simple clicks. It’s seriously awesome. https://tinkercad.com
  • 39. Eve Online WebGL ship viewer. http://www.eveonline.com/universe/spaceships/
  • 40. Both Google Maps and Nokia have recently added support for WebGL. The Nokia version is particularly impressive because they fully render and texture 3D shapes of buildings. http://support.google.com/maps/bin/answer.py?hl=en&answer=1630790 http://maps.nokia.com/webgl/
  • 41. Undulating monkey by Paul Lewis. http://lab.aerotwist.com/webgl/undulating-monkey/
  • 42. I’m not going to lie, WebGL isn’t the easiest thing to learn. Then again, no raw 3D code is that simple. Instead, I recommend checking out a library called three.js which abstracts WebGL and makes it much easier to implement. https://github.com/mrdoob/three.js/
  • 43. m e Fra on ps ati ati on loo nim d anim estA timise qu Op re requestAnimationFrame is the new, better way of managing animation in JavaScript. Instead of constantly running a setTimeout or setInterval function, which lack performance and spike CPU usage, requestAnimationFrame puts the browser in control of things and keeps things running smoothly. https://developer.mozilla.org/en/DOM/window.requestAnimationFrame
  • 44. requestAnimationFrame function update(timestamp) {   // DO SOMETHING   window.mozRequestAnimationFrame(update);   }   window.mozRequestAnimationFrame(update); In this example, I’m only using the Mozilla prefixed version of requestAnimationFrame. In reality, there’s a really good shim by Paul Irish that handles cross-browser requestAnimationFrame. http://paulirish.com/2011/requestanimationframe-for-smart-animating/
  • 45. d io a u L5 usic TM nd m H grou ck ba nd ctsa effe nd Sou HTML5 audio allows for plugin-less audio. For games, this would be used for sound effects and background music. Audio data APIs implemented by Mozilla and Google allow for manipulation of audio and much more fine-grained control. https://developer.mozilla.org/en/HTML/Element/audio https://developer.mozilla.org/en/Introducing_the_Audio_API_Extension
  • 46. This is something I made especially for the ASSEMBLY 2011 event in Finland. It’s an audio visualiser that uses WebGL and the HTML5 Audio Data API. http://robhawkes.github.com/webgl-html5-audio-visualiser/
  • 47. Canvas.fm uses Soundcloud, the Audio Data API and canvas to render music as it plays. http://canvas.fm
  • 48. Audio <audio id='myAudioElement' controls>   <source src='audiofile.ogg' type='audio/ogg'> </audio> Like canvas, using audio is also straight forward. The first thing you need to do is add an audio DOM element to your HTML page.
  • 49. Audio var audio = document.getElementById('myAudioElement'); audio.play(); audio.pause(); From there you can then access the audio element through JavaScript to control it.
  • 50. ge ra to kies cal s coo Lo than ore gm torin S Methods like the application cache, Local Storage, and IndexedDB are great for storing relatively large quantities of data locally. This way you can cache data and allow the website to pick up where the user left off. https://developer.mozilla.org/en/DOM/Storage https://developer.mozilla.org/en/Offline_resources_in_Firefox https://developer.mozilla.org/en/IndexedDB
  • 51. e ts ock bS ation e W omm un ic yerc ltipla Mu WebSockets can be used for the real-time communication between a browser client and server. For games, this would be used for fast-paced multiplayer functionality. https://developer.mozilla.org/en/WebSockets
  • 52. GoSquared use WebSockets for real-time website analytics. http://www.gosquared.com
  • 53. WebSockets var ws = new WebSocket('http://example.com/socketserver'); ws.send('This message is sent to the WebSocket server'); ws.onmessage = function (event) {     console.log(event.data);   } WebSockets are created entirely from JavaScript without the need to add elements to the HTML page. A new WebSocket connection can be opened by calling the ‘new WebSocket’ constructor and passing it the URL to the WebSocket server. From there you can call the ‘send’ method to push data to the server. Or listen for the ‘onmessage’ event to handle data pushed to you from the server.
  • 54. e rs ork b W aS cript e W eaded Jav i-thr Mult Web Workers allow you to run JavaScript in separate background threads. This allows you to offload computationally-heavy tasks with a single worker, or tackle large quantities of data in a fraction of the time by spreading tasks over multiple workers. Another benefit of doing this is that you don’t lock up the browser during heavy tasks, meaning a user can still interact with things and get stuff done. https://developer.mozilla.org/En/Using_web_workers
  • 55. Web Workers var worker = new Worker('my-worker.js'); worker.onmessage = function(event) {    console.log('Worker message: ' + event.data);   }; Web Workers, like WebSockets, are created entirely through JavaScript. You create a new worker by calling the ‘new Worker’ constructor and passing it the path to a JavaScript file. You can then listen to the ‘onmessage’ event that will be fired every time the worker script sends data using a ‘postMessage’ method.
  • 56. PI n A re e ul Sc we rf ull et po F im ple ,y S The Full Screen API allows you to expand any HTML element to fill the users screen, even if the browser isn’t running full screen itself. For games, this is great because you can make the small canvas element fill the entire screen. Outside of games, this is useful for video elements and Web applications. https://bugzilla.mozilla.org/show_bug.cgi?id=545812 http://blog.pearce.org.nz/2011/09/mozilla-full-screen-api-progress-update.html https://wiki.mozilla.org/Platform/Features/Full_Screen_APIs
  • 57. Full Screen API var canvas = document.getElementById('myCanvasElement'); if (canvas.requestFullscreen) {     canvas.requestFullscreen(); } else if (canvas.mozRequestFullScreen) {     canvas.mozRequestFullScreen(); } else if (canvas.webkitRequestFullScreen) {     canvas.webkitRequestFullScreen(); } The Full Screen API can be requested from any DOM element. In this example you’re asking a canvas element to expand to fill the screen. One thing to note is that you can’t just make any element fill the screen whenever you want. Right now, the user has to click or press a key to initiate the Full Screen API.
  • 58. P I A o ck ace r L pl te ne oin rso rino P cu he gt ockin L The Pointer Lock API is an attempt at improving the mouse as an input device. It would be used in situations like games and 3D visualisations where the mouse position rotates or moves you around a 3D space. As it stands there’d still be a cursor moving around the screen causing all sorts of trouble when you want to click on something in your game. With the new API you can lock your mouse position and stop it from getting in the way and being a nuisance. This is available in both Firefox and Chrome. https://bugzilla.mozilla.org/show_bug.cgi?id=633602
  • 59. P I d A p a eb me he W Ga et ot ol ns co he gt gin Brin The Gamepad API is one of the major improvements to input that is coming. Both Mozilla and Google are working an an implementation of this and there is actually an experimental build of Firefox available to the public that has it working. The API is also in the dev build of Chrome. What I find most interesting about the Gamepad API is that it might be just the thing we need to finally justify HTML5 gaming on a TV or console. Who wants to use a keyboard and mouse while sitting on the sofa? https://wiki.mozilla.org/GamepadAPI http://www.gamepadjs.com https://github.com/jbuck/input.js
  • 60. This is a little demo that I put together to show off the Gamepad API implemented in my game Rawkets.
  • 61. P I n A a t io es n t de vic ri e ob ile n O on m ree ha ve Sc M ust- The Screen Orientation API allows you to do things like changing and locking, you guessed it, the orientation of the screen. Before now, it’s been incredibly difficult to lock orientation on a website or game using nothing but JavaScript. https://bugzilla.mozilla.org/show_bug.cgi?id=740188 http://dvcs.w3.org/hg/screen-orientation/raw-file/default/Overview.html
  • 62. Screen Orientation API if (screen.mozLockOrientation) { screen.mozLockOrientation('landscape'); } The Screen Orientation API is another relatively simple one. It just landed in Firefox Nightly on mobile. All you need to do is call the ‘lockOrientation’ method of the screen object and pass it a orientation string. It’s important to note that you also need to be using the Full Screen API for the orientation lock to work.
  • 63. e.js od N cation uni m com rk etwo dn an gic ver lo Ser Node is often used as a multiplayer game server, controlling the logic and handling the WebSockets connections to the players. It can be used for player authentication and the storage of data so gameplay can persist over multiple game sessions. This is all made relatively easy with great third-party modules, like Socket.IO for WebSockets, and others that handle Redis and MongoDB for storage, for example. http://nodejs.org
  • 64. n s tio plica bsite ap yw e eb ta fanc W ot jus N The concept of Web apps is something that is gaining a lot of traction at the moment. It’s no doubt this this traction is as a result of the success of native applications and games on the desktop and mobile, particularly with iOS and Android. https://developer.mozilla.org/en/Apps
  • 65. nce erie exp scre en like ho me p- op or Ap eskt thed from ch un La Something that needs to be tackled with Web apps is how to make them feel like real applications rather than glorified websites. One way that is being considered is completely removing the browser chrome and running the application in it’s own window. This will effectively mean that you have full control of the app UI and it won’t look like it’s being run in a browser.
  • 66. At Mozilla we call this WebRT, which stands for Web Run-Time. By using WebRT you can install a Web app directly into the OS just like you would a native application. The WebRT app will look and feel like a native application when launched but will actually be running a browser rendering engine behind the scenes. This is an example of my game Rawkets running as a WebRT app with the Firefox rendering engine. Notice the lack of browser UI. https://developer.mozilla.org/en/Apps/Apps_architecture#Web_runtime
  • 67. e s gin e n ay e m game st od Ga ML5 HT te Crea If you haven’t already then I encourage you to give HTML5 game development a go. And you don't have to create an entire game infrastructure from scratch, you can use some of the existing engines that are proving popular.
  • 68. Impact. A 2D game engine. I used this recently, and it’s really well made and has a good level editor and development tools. The documentation is great and the author is active and very helpful. http://impactjs.com/
  • 69. Crafty. Another 2D game engine. It’s a free engine and is doing much better than other free engines out there. http://craftyjs.com/
  • 70. Isongenic Engine. A 2D to 2.5D game engine. Massively multiplayer networking built in, uses Node and MongoDB, and has canvas or DOM- based graphics. http://www.isogenicengine.com
  • 71. ing ort e & p bas ion ec od e- vers a sin gl on ing C Us A lot of game developers want to target browsers but don’t want to rewrite their existing games in JavaScript. To help this process, various methods of converting an existing code-base to JavaScript are starting to appear. However, these methods also apply to non-games. Many people are now converting utility scripts from native languages over to JavaScript. Things like SQLite, even Ruby!
  • 73. PlayN and Google Web Toolkit https://developers.google.com/playn/ https://developers.google.com/web-toolkit/
  • 75. u p g in zon eep ri K e ho th ff on tu uchs m So I’ve really only touched the tip of the iceberg here. There is much more coming in the near future. Here are a few ways to keep up with things and get yourself prepared, particularly the things happening at Mozilla.
  • 76. Are We Fun Yet? https://wiki.mozilla.org/Platform/AreWeFunYet
  • 77. Firefox Aurora “Get a first look at the latest developer tools, security features and innovative HTML5 and other Web technologies.” http://www.mozilla.org/en-US/firefox/channel/#aurora
  • 78. Firefox Nightly Bleeding edge functionality. Testing only. http://nightly.mozilla.org
  • 79. Foundation HTML5 Canvas Out now Paperback and digital formats Become a canvas master Learn how to animate Make two cool space games RAWKES.COM/FOUNDATIONCANVAS Foundation HTML5 Canvas is out now on Amazon and other reputable book stores. http://rawkes.com/foundationcanvas
  • 80. HTML5 Games Most Wanted Out now Paperback and digital formats Learn from the best Various game-related tutorials Other tips and tricks APRESS.COM/9781430239789 HTML5 Games Most Wanted is out now on Amazon and other reputable book stores. http://apress.com/9781430239789
  • 81. O U Y s? K tion N ues A Q TH R b es wk es Ha wk ob ha ro @ Thank you. If you have any questions feel free to grab me, or bug me on Twitter (@robhawkes). I’m a friendly chap and I’ll be happy to help.