Beginning Android Games – Table of Contents

I thought it would be a nice idea to share the complete table of contents with you here. This is the final TOC (except for some orthographic corrections here and there). All the chapters and sections are finished, so that’s exactly what you will find in the book. Enjoy.

Fun fact: Richard Taylor of Rokon fame was initially doing the book. Due to various reasons he scrapped the project and APress handed it over to me. I started fresh from the beginning. So if you wonder why there’s Richard’s name on the cover: it’s old :)

The book is scheduled to be released on April 5th 2011 at a price of 39.99$ for the print version and 29.99$ for the e-book version. At least that’s my last information from Apress. Please don’t kill me if it changes. It’s out of my hands. Here’s the Amazon link. All the code will be open sourced and placed on Google Code for your to plow through.

1] Android, the New Kid on the Block
  - A Brief History of Android
  - Fragmentation
  - The Role of Google
    - The Android Open Source Project
	- The Android Market
	- Challenges, Device Seeding and Google I/O
  - Android's Features and Architecture
    - The Kernel
	- The Runtime and Dalvik
	- System Libraries
	- The Application Framework
  - The Software Development Kit
  - The Developer Community
  - Devices, Devices, Devices!
    - Hardware
	- First Gen, Second Gen, Next Gen
	  - In the Beginning: First Generation
	  - More Power: Second Generation
	  - The Future: Next Generation
	  Game Controllers
  - Mobile Gaming is Different
    - A Gamin Machine in Every Pocket
	- Always Connected
	- Causal and Hardcore
	- Big Market, Small Developers
  - Summary
2] First Steps with the Android SDK
  - Setting Up the Development Environment
    - Setting Up the JDK
    - Setting Up the Android SDK
    - Instaling Eclipse
    - Installing the ATD Eclipse Plug-In
    - A quick Tour of Eclipse
  - Hello World, Android Style
    - Creating the Project
	- Exploring the Project
	- Writing the Application Code
  - Running and Debugging Android Applications
    - Connecting a Device
	- Creating an Android Virtual Device
	- Running an Application
	- Debugging an Application
	- LogCat and DDMS
	- Using ADB
  - Summary
3] Game Development 101
  - Genres: To Each One's Own
    - Causal Games
	- Puzzle Games
	- Action & Arcade Games
	- Tower-Defense Games
	- Innovation!
  - Game Design - The Pen is Mightier Than the Code
    - Core Game Mechanics
	- A Story and an Art Style
	- Screens and Transitions
  - Code - The Nitty Gritty Details
    - Application and Window Managment
	- Input
	- File I/O
	- Audio
	  - The Physics of Sound
	  - Recording and Playback
	  - Audio Quality and Compression
	  - In Practice
	- Graphics
	  - Of Rasters, Pixels and Framebuffers
	  - Vsync and Double-Buffering
	  - What Is Color?
	  - Color Models
	  - Encoding Colors Digitally
	  - Image Formats and Compression
	  - Alpha Compositing and Blending
	  - In Practice
	- The Game Framework
	  - The Game and Screen Interfaces
	  - A Simple Example
	  - Frame-Rate Independent Movement
  - Summary
4] Android for Game Developers
  - Defining an Android Application - The Manifest File
    - The  Element
	- The  Element
	- The  Element
	- The  Element
	- The  Element
	- The  Element
	- Android Game Project Setup in Ten Easy Steps
	- Defining the Icon of Your Game
  - Android API Basics
    - Creating a Test Project
	  - The AndroidBasicsStarter Activity
	  - Starting Activities Programmatically
	  - Creating the Test Activities
    - The Activity Life Cycle
	  - In Theory
	  - In Practice
	- Input Device Handling
	  - Getting (Multi-)Touch Events
	    - Processing Single-Touch Events
		- Processing Multi-Touch Events
		  - Pointer IDs and Indices
		  - The Action Mask and More Event Types
		- In Practice
      - Processing Key Events
	  - Reading the Accelerometer State
	- File Handling
	  - Reading Assets
	  - Accessing the External Storage
	- Audio Programming
	  - Setting the Volume Controlls
	  - Playing Sound Effects
	  - Streaming Music
	- Basic Graphics Programming
	  - Using Wake Locks
	  - Going Full-Screen
	  - Continuous Rendering in the UI Thread
	  - Getting the Screen Resolution (and coordinate systems)
	  - Drawing Simple Shapes
	    - Drawing Pixels
		- Drawing Lines
		- Drawing Rectangles
		- Drawing Circles
		- Putting it all together
      - Using Bitmaps
	    - Loading and Examining Bitmaps
		- Disposing Bitmaps
		- Drawing Bitmaps
		- Putting it All Together
	  - Rendering Text
	    - Loading Fonts
		- Drawing Text With a Font
		- Putting it All Together
	  - Continuous Rendering with SurfaceView
	    - Motivation
		- SurfaceHolder and Locking
		- Surface Creation and Validity
		- Putting it All Together
  - Best Practices
  - Summary
5] An Android Game Development Framework
  - Plan of Attack
  - AndroidFileIO - Easy Peasy
  - AndroidAudio, AndroidSound and AndroidMusic
  - AndroidInput, AccelerometerHandler ...
    - AccelerometerHandler - Which Side is Up?
	- Pool - Wait What?
	- KeyboardHandler   – Up, Up, Down, Down, Left, Right …
	- Touch Handlers - Can't Touch This
	  - The TouchHandler Interface
	  - The SingleTouchHandler
	  - The MultiTouchHandler
	- AndroidInput - The Great Coordinator 
  - AndroidGraphics, AndroidPixmap - Double Rainbow
    - Handling Different Screen Sizes & Resolutions
	  - Density
	  - Aspect Ratio
	  - Coping with Different Aspect Ratios
	  - A Simpler Solution
	  - The Implementation
	- AndroidPixmap - Pixels for the People
	- AndroidGraphics - Serving Our Drawing Needs
	- AndroidFastRenderView - Loop, Stretch, Loop, Stretch
  - AndroidGame - Tying Everything Together
  - Summary
6] Mr. Nom Invades Android
  - Creating the Assets
  - Setting up the Project
  - MrNomGame - The Main Activity
  - Assets - A Convenient Asset Store
  - Settings - Keep Track of User Choices and Highscores
  - LoadingScreen - Fetching the Assets from the Disk
  - The Main Menu Screen
  - The HelpScreen Class(es)
  - The Highscores Screen
    - Rendering Numbers - An Excourse
	- Implementing the Screen
  - GameScreen, World, Snake, Stain - It's Alive!
    - Abstracting the World of Mr. Nom - Model-View-Controller
	  - The Stain Class
	  - The Snake and SnakePart Class
	  - The World Class
	    - Time-Based Movement of Mr. Nom
		- Placing Stains
		- Determining When the Game is Over
		- Implementing the World Class
  - The GameScreen Class
  - Summary
7] OpenGL ES – A Gentle Introduction 
  - What is OpenGL ES and Why Should I Care?
    - The Programming Model - An Analogy
	- Projections
	- Normalized Device Space and the Viewport
	- Matrices
	- The Rendering Pipeline
  - Before We Begin
  - GLSurfaceView - Making Things Easy Since 2008
  - GLGame - Implementing the Game Interface
  - Look Mom, I Got a Red Triangle
    - Defining the Viewport
	- Defining the Projection Matrix
	  - Matrix Modes and Active Matrices
	  - Orthographic Projection with glOrthof
	  - A Helpful Snippet
	- Specifying Triangles
	  - A Small NIO Buffer Excurse
	  - Pumping Vertices to OpenGL ES
	- Putting it All Together
  - Per Vertex Color - Red, Green, Blue
  - Texture Mapping - Wall Papering Made Easy
    - Texture Coordinates
	- Uploading Bitmaps
	- Texture Filtering
	- Disposing Textures
	- A Helpful Snippet
	- Enabling Texturing
	- Putting it Together
	- A Texture Class
  - Indexed Vertices - Because Reuse is Good For You
    - Putting it Together
	- The Vertices Class
  - Alpha Blending - I Can See Through You
  - More Primitives - Points, Lines, Strips, Fans
  - 2D Transformations - Fun with the Model-View Matrix
    - Eye, World and Model Space
	- Matices Again!
	- An First Example using Translation
	  - Bob Becomes a Class
	  - Putting it Together
	- More Transformations
	  - Rotation
	  - Scaling
	  - Combining Transformations
	- Optimizing for Performance
	  - Meassuring Frame Rate
	  - The Curious Case of the Hero on Android 1.5
	  - What's Making My OpenGL ES Rendering So Slow?
	  - Removing Unnecessary State Changes
	  - Reducing Texture Sizes Means Less Pixels Have to be Fetched!
	  - Reducing Calls to OpenGL ES/JNI Methods
	  - The Concept of Binding Vertices
	  - In Closing
  - Summary
8] 2D Game Programming Tricks
  - Before We Begin
  - In the Beginning There Was the Vector
    - Working With Vectors
	- A Little Trigonometry
	- Implementing a Vector Class
	- A Simple Usage Example
  - A Little Physics in 2D
    - Newton and Euler - Best Friends Forever
	- Force and Mass
	- Playing Around, Theoretically
	- Playing Around, Practically!
  - Collision Detection and Object Representation in 2D
    - Bounding Shapes
	- Constructing Bounding Shapes
	- Game Object Attributes
	- Broad Pahse and Narrow Phase Collision Detection
	  - Narrow Pahse
	    - Circle Collision
		- Rectangle Collision
		- Circle/Rectangle Collision
		- Putting it All Together
	  - Broad Phase
	- An Elaborate Example
	  - GameObject, DynamicGameObject and Cannon
	  - The Spatial Hash Grid
	  - Putting it All Together
  - A Camera in 2D
    - The Camera2D Class
	- An Example
  - Texture Atlas - Cause Sharing is Caring
    - An Example
  - Texture Regions, Sprites and Batches - Hiding OpenGL ES
    - The TextureRegion Class
	- The SpriteBatcher Class
	  - Using the SpriteBatcher Class
	  - Measuring Peformance
	  - Working Around a Bug in FloatBuffer
  - Sprite Animation
    - The Animation Class
	- An Example
  - Summary
9] Super Jumper – A 2D OpenGL ES Game!
  - Core Game Mechanics
  - A Backstory and Art Style
  - Screens and Transitions
  - Defining the Game World
  - Creating the Assets
    - The UI Elements
	- Handling Text with Bitmap fonts
	- The Game Elements
	- Texture Atlas to the Rescue
	- Music and Sound
  - Implementing Super Jumper!
    - The Assets Class
	- The Settings Class
	- The Main Activity
	- The Font Class
	- GLScreen - Because Laziness is King
	- The Main Menu Screen
	- The Help Screens
	- The Highscores Screen
	- The Simulation Classes - Bob, Squirrel, Platform...
	  - The Spring Class
	  - The Castle Class
	  - The Squirrel Class
	  - The Platform Class
	  - The Bob Class
	  - The World Class
	    - Generating the World
		- Updating the World
		- Collision Detection and Response
		- Game Over, Buddy!
	- The Game Screen
	  - Updating the GameScreen
	  - Rendering the GameScreen
	  - Finishing Touches
	- The WorldRenderer Class
  - To Optimize or Not to Optimize
  - Summary
10] OpenGL ES – Going 3D
  - Before We Begin
  - Vertices in 3D
  - Perspective Projection - The Closer the Bigger
  - Z-Buffer - Bringing Order Into Chaos
    - Fixing the Last Example
	- Blending - There's Nothing Behind You
	- Z-Buffer Precision and Z-Fighting
  - Defining 3D Models
    - A Cube - "Hello World" in 3D
  - Matrices and Transformations - Again
    - The Matrix Stack
	- Hierachical Systems with the Matrix Stack
	  - A Simple Crate Solar System
	  - The HierarchicalObject Class
	  - Putting it All Together
	- A Simple Camera System
  - Summary
11] 3D Programming Tricks
  - Before We Begin
  - Vectors in 3D
  - Lighting in OpenGL ES 
    - How Lighting Works
	- Light Sources
	- Materials
	- How OpenGL ES Calculates Lighting - Vertex Normals
	- In Practice
	  - Enabling and Disabling Lighting
	  - Specifying Light Sources
	    - Ambient Light
		- Point Light
		- Directional Lights
	  - Specifying Materials
	  - Specifying Normals
	  - Putting it All Together
	- Some Notes
  - Mip Mapping
  - Simple Camera(s)
    - The First Person or Euler Camera
	- An Euler Camera Example
	- A Look-At Camera
  - Loading Models
    - The Wavefront OBJ Format
	- Implementing an OBJ Loader
	- Using the OBJ Loader
	- Some Notes
  - A Little Physics in 3D
  - Collision Detection and Object Representation in 3D
    - Bounding Shapes in 3D
	- Bounding Sphere Overlap Testing
	- GameObject3D and DynamicGameObject3D
  - Summary
12] Droid Invaders – Grande Finale
  - Core Game Mechanics
  - A Backstory and Art Style
  - Screens and Transitions
  - Defining the Game World
  - Creating the Assets
    - The UI Assets
	- The Game Assets
	- Sound and Music
  - Plan of Attack
  - The Assets Class
  - The Settings Class
  - The Main Activity
  - The Main Menu Screen
  - The Settings Screen
  - The Simulation Classes
    - The Shield Class
	- The Shot Class
	- The Ship Class
	- The Invader Class
	- The World Class
  - The GameScreen Class
  - The WorldRenderer Class
  - Optimizations
  - Summary
13] Publishing Your Game
  - A Word on Testing
  - Becoming a Registered Developer
  - Sign Your Game's APK
  - Putting Your GAme on the Market
    - Uploading Assets
	- Listing Details
	- Publishing Options
	- Publish!
	- Marketing
  - The Developer Console
  - Summary
14] What’s Next?
  - Getting Social
  - Location Awareness
  - Multiplayer Functionality
  - OpenGL ES 2.0 and More
  - Frameworks and Engines
  - Resources on the Web
  - Closing Words	 
  • nate


  • David Erosa

    Just three questions: when? where? and.. how much? 😉

  • dertom

    Wow! Perfect! Gratz!
    Any clue about when it will be released and about the price (Sry, if you already answered this in previous posts)

  • Mario

    Updated post.

  • Lars Vogel

    Looks very good Mario! Also looking forward to your gaming tutorial on the Droidcon.

  • dertom

    Soo…just ordered the book!

  • Obli

    Will order it too, for sure 😉

  • Bob

    So, will there be anything libgdx specific or just all general opengl stuff?

  • dertom

    Have a look here: There you can read the table of content! It’s great 😀

  • esak

    Looks awesome!
    I will definetely buy it :-)

  • Paul

    Looking good can’t wait!

  • Pingback: Foreign Languages Aren't so Difficult()

  • Mario

    @Bob: no libgdx specific stuff. General OpenGL ES 1.0. But we develop a framework in the book that might look somewhat familiar :)

  • Pär Dahlberg

    Cool. I’ve never done a game in open gl so hopefully this can help me get started.

    I would rather have a book without the “android sdk basics” stuff, but I guess all Android dev books are required to have that.

    Sure looks like I’ll have to buy this.

  • Pär Dahlberg

    Btw, do you know if apress plans to sell a kindle version on

    I know they got their own digital versions, but they have the annoying password protected pdfs which isn’t much fun to enter on a mobile every time you want to read.

  • Djal

    Pre-ordered, waiting now.

  • Dave

    Looks great! Congrats mate, hope it sells well :) My offer of proofreading still stands by the way.

  • Bob

    Awesome. I’ll be preordering as soon as I get paid. :)

  • brin

    Very nice. I’ll buy this book. The reason being- I’ve actually skimmed the “Pro Android Games” book before at a local bookstore and I don’t recall it covering half as much as you do in this book in terms of breadth and depth. (But to be fair I’m only judging from the TOC in this book vs the actual contents of PAG). I’m really looking forward to getting my hands on your book.

    ‘Gratz Mario!

  • grayger

    It must be an excellent book. I hope to check it out soon.

  • Nil

    The TOC sounds great. May we know on which SDK it is based ?

  • Mario

    1.5 – 2.3

  • Randin

    I just bought the book, looking forward to reading it.

  • Dheeraj

    I am a newbie to the world of android development.
    Any help in this matter would be much appreciated.

    Find out lot of good and new things on this blog.
    By the way Nice blog.