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 <manifest> Element - The <application> Element - The <activity> Element - The <uses-permission> Element - The <uses-feature> Element - The <uses-sdk> 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