(January 29, 2012 -- Beyond this point is my original review of "HTML5 Games: Creating Fun with HTML5, CSS3, and WebGL." Please note that the content below was written prior to completing "Chapter 10: Creating Audio for Games." I will complete this review once I have gone through the rest of the book.)
When I first heard Jacob Seidelin (the mastermind behind the NihiLogic Web site and the famous "HTML5 Canvas Cheat Sheet") was working on a book that was to cover game development using HTML5, I got excited. The current crop of HTML5 game programming books is, to put it bluntly, quite underwhelming. However, I knew if the book Mr. Seidelin was working on is near the caliber of the content on his Web site -- I'd be in for a real treat.
The book, "HTML5 Games: Creating Fun with HTML5, CSS3, and WebGL," meets my expectations.
In Part 1 of the book, you start out by learning a bit about the history of HTML5, and gaining some ideas about how HTML5 can be used for gaming. In Chapter 2, after a primer on the game you will be building (a puzzle game along the lines of "Jewel Quest"), you get to the nitty-gritty and start the HTML/CSS files (along with a few scripts) necessary for the game -- including coverage of Web Fonts.
Part 1 concludes with a chapter on techniques to help your project translate well on mobile devices. This chapter is a gold-mine of tips and tricks that will get you going if you want your games to work well on Apple mobile devices and Android systems.
Then, in "Part 2", you get into the thick of it. Chapter 4 has you build the game-board module, including move-validation (so that one cannot make illegal moves), finding sets-of-three, and clearing/refilling the game board. Chapter 5 covers Web Workers, and does so well -- Mr. Seidelin does a good job of explaining why workers can be helpful, and in what situations they perform (or don't perform) well.
In Chapter 6, you will be introduced to Canvas -- the scriptable graphics element introduced in HTML5. Everything is covered -- shapes/paths, transformation/scaling/rotation, rendering text and images, and real-time rendering (such as shadows, and my personal favorite -- compositing). Chapter 7 extends the game by showing you how to pre-load game assets (and display a progress bar in the meantime), and adding a "fallback" rendering method using CSS sprites and the DOM to control the game view.
Chapter 8 covers input. In addition to mouse and keyboard input, Jacob will explain to you how touch events work on devices with touch screens, and how to interpret them in the game. Chapter 9 covers animating the game, and includes a handy "fallback" script that imitates the functionality of requestAnimationFrame() for browsers without support for the function built-in.
Part 3 (which I have not delved into -- yet) covers the Audio element in Chapter 10, whereas Chapter 11 will guide you through adding WebGL rendering to the game project.
Part 4 covers more of the advanced functions introduced in HTML5, such as Local Storage and WebSockets. The book winds down in Chapter 14 with a list of resources -- everything from external libraries (Box2D, Impact, and Three are covered), to app deployment/sales (for both desktop and mobile devices), and so on.
In summary, this book is pretty much going to take you from 0 to 60 in about 430 pages. Jacob has a really great writing style, in that he explains things very well without being overly verbose -- he says a lot by saying a little. This makes it much easier to grasp even difficult concepts. His use of modules such as Modernizr and Sizzle is, in my opinion, a good thing (jQuery is more popular, but would add a bit of unnecessary bloat, unfortunately). I'm really impressed with the editing -- I have only come across one instance of mangled code, and it is minor. (I had the error marked and planned to point it out; unfortunately, the marker I used fell out of the book...)
One caveat -- there is some serious JavaScript-Fu going on in this book. If you are not at least somewhat comfortable with JavaScript and how it works under the hood, prepare to be schooled.
"HTML5 Games: Creating Fun with HTML5, CSS3, and WebGL" by Jacob Seidelin gets five well-deserved stars from me.