Thư viện tri thức trực tuyến
Kho tài liệu với 50,000+ tài liệu học thuật
© 2023 Siêu thị PDF - Kho tài liệu học thuật hàng đầu Việt Nam

Beginning android games
Nội dung xem thử
Mô tả chi tiết
Beginning Android
Games
■ ■ ■
Mario Zechner
Beginning Android Games
Copyright © 2011 by Mario Zechner
All rights reserved. No part of this work may be reproduced or transmitted in any form or by any
means, electronic or mechanical, including photocopying, recording, or by any information
storage or retrieval system, without the prior written permission of the copyright owner and the
publisher.
ISBN-13 (pbk): 978-1-4302-3042-7
ISBN-13 (electronic): 978-1-4302-3043-4
Trademarked names, logos, and images may appear in this book. Rather than use a trademark
symbol with every occurrence of a trademarked name, logo, or image we use the names, logos,
and images only in an editorial fashion and to the benefit of the trademark owner, with no
intention of infringement of the trademark.
The use in this publication of trade names, trademarks, service marks, and similar terms, even if
they are not identified as such, is not to be taken as an expression of opinion as to whether or not
they are subject to proprietary rights.
President and Publisher: Paul Manning
Lead Editor: Steve Anglin
Development Editor: Matthew Moodie
Technical Reviewer: Robert Green
Editorial Board: Steve Anglin, Mark Beckner, Ewan Buckingham, Gary Cornell, Jonathan
Gennick, Jonathan Hassell, Michelle Lowman, Matthew Moodie, Jeff Olson, Jeffrey
Pepper, Frank Pohlmann, Douglas Pundick, Ben Renow-Clarke, Dominic
Shakeshaft, Matt Wade, Tom Welsh
Coordinating Editor: Adam Heath
Copy Editors: Damon Larson, Jim Compton
Compositor: MacPS, LLC
Indexer: BIM Indexing & Proofreading Services
Artist: April Milne
Cover Designer: Anna Ishchenko
Distributed to the book trade worldwide by Springer Science+Business Media, LLC., 233 Spring
Street, 6th Floor, New York, NY 10013. Phone 1-800-SPRINGER, fax (201) 348-4505, e-mail
[email protected], or visit www.springeronline.com.
For information on translations, please e-mail [email protected], or visit www.apress.com.
Apress and friends of ED books may be purchased in bulk for academic, corporate, or
promotional use. eBook versions and licenses are also available for most titles. For more
information, reference our Special Bulk Sales–eBook Licensing web page at
www.apress.com/info/bulksales.
The information in this book is distributed on an “as is” basis, without warranty. Although every
precaution has been taken in the preparation of this work, neither the author(s) nor Apress shall
have any liability to any person or entity with respect to any loss or damage caused or alleged to
be caused directly or indirectly by the information contained in this work.
The source code for this book is available to readers at www.apress.com.
v
Contents
Contents at a Glance .......................................................................................... iv
About the Author ............................................................................................... xii
About the Technical Reviewer ......................................................................... xiii
Acknowledgments ............................................................................................ xiv
Introduction ....................................................................................................... xv
■Chapter 1: Android, the New Kid on the Block ................................................ 1
A Brief History of Android ....................................................................................................................................... 2
Fragmentation ......................................................................................................................................................... 3
The Role of Google .................................................................................................................................................. 3
The Android Open Source Project ...................................................................................................................... 3
The Android Market ........................................................................................................................................... 4
Challenges, Device Seeding, and Google I/O ..................................................................................................... 6
Android’s Features and Architecture ...................................................................................................................... 7
The Kernel .......................................................................................................................................................... 8
The Runtime and Dalvik ..................................................................................................................................... 8
System Libraries ................................................................................................................................................ 9
The Application Framework ............................................................................................................................. 10
The Software Development Kit ............................................................................................................................. 11
The Developer Community .................................................................................................................................... 12
Devices, Devices, Devices! ................................................................................................................................... 12
Hardware ......................................................................................................................................................... 13
First Gen, Second Gen, Next Gen ..................................................................................................................... 14
Mobile Gaming Is Different ................................................................................................................................... 20
A Gaming Machine in Every Pocket ................................................................................................................. 20
Always Connected ........................................................................................................................................... 21
Casual and Hardcore ........................................................................................................................................ 22
Big Market, Small Developers .......................................................................................................................... 22
Summary .............................................................................................................................................................. 23
■Chapter 2: First Steps with the Android SDK ................................................. 25
Setting Up the Development Environment ............................................................................................................ 25
Setting Up the JDK ........................................................................................................................................... 26
■ CONTENTS
vi
Setting Up the Android SDK ............................................................................................................................. 26
Installing Eclipse .............................................................................................................................................. 28
Installing the ADT Eclipse Plug-In .................................................................................................................... 28
A Quick Tour of Eclipse .................................................................................................................................... 30
Hello World, Android Style .................................................................................................................................... 32
Creating the Project ......................................................................................................................................... 32
Exploring the Project ........................................................................................................................................ 33
Writing the Application Code ........................................................................................................................... 35
Running and Debugging Android Applications ...................................................................................................... 38
Connecting a Device ........................................................................................................................................ 38
Creating an Android Virtual Device .................................................................................................................. 38
Running an Application .................................................................................................................................... 39
Debugging an Application ................................................................................................................................ 42
LogCat and DDMS ............................................................................................................................................ 46
Using ADB ........................................................................................................................................................ 48
Summary .............................................................................................................................................................. 49
■Chapter 3: Game Development 101 ............................................................... 51
Genres: To Each One’s Taste ................................................................................................................................ 51
Causal Games .................................................................................................................................................. 52
Puzzle Games ................................................................................................................................................... 54
Action and Arcade Games ................................................................................................................................ 56
Tower-Defense Games .................................................................................................................................... 59
Innovation ........................................................................................................................................................ 60
Game Design: The Pen Is Mightier Than the Code ................................................................................................ 60
Core Game Mechanics ..................................................................................................................................... 61
A Story and an Art Style ................................................................................................................................... 63
Screens and Transitions .................................................................................................................................. 64
Code: The Nitty-Gritty Details ................................................................................................................................ 70
Application and Window Management ............................................................................................................ 71
Input ................................................................................................................................................................. 72
File I/O .............................................................................................................................................................. 75
Audio ................................................................................................................................................................ 76
Graphics ........................................................................................................................................................... 80
The Game Framework ...................................................................................................................................... 94
Summary ............................................................................................................................................................ 101
■Chapter 4: Android for Game Developers .................................................... 103
Defining an Android Application: The Manifest File ............................................................................................ 104
The <manifest> Element ............................................................................................................................... 105
The <application> Element ........................................................................................................................... 105
The <activity> Element ................................................................................................................................. 107
The <uses-permission> Element .................................................................................................................. 109
The <uses-feature> Element ......................................................................................................................... 110
The <uses-sdk> Element .............................................................................................................................. 112
Android Game Project Setup in Ten Easy Steps ............................................................................................. 112
Defining the Icon of Your Game ..................................................................................................................... 114
Android API Basics .............................................................................................................................................. 116
Creating a Test Project .................................................................................................................................. 116
■ CONTENTS
vii
The Activity Life Cycle . .................................................................................................................................... 120
Input Device Handling . .................................................................................................................................... 127
File Handling .................................................................................................................................................... 144
Audio Programming . ....................................................................................................................................... 150
Playing Sound Effects . .................................................................................................................................... 150
Streaming Music . ............................................................................................................................................ 154
Basic Graphics Programming . ........................................................................................................................ 158
Best Practices ....................................................................................................................................................... 182
Summary .............................................................................................................................................................. 183
■Chapter 5: An Android Game Development Framework .............................. 185
Plan of Attack ........................................................................................................................................................ 185
The AndroidFileIO Class . ...................................................................................................................................... 186
AndroidAudio, AndroidSound, and AndroidMusic: Crash, Bang, Boom! .............................................................. 187
AndroidInput and AccelerometerHandler . ............................................................................................................ 192
AccelerometerHandler: Which Side Is Up? ..................................................................................................... 193
The Pool Class: Because Reuse is Good for You! ............................................................................................ 194
KeyboardHandler: Up, Up, Down, Down, Left, Right . . . ................................................................................. 196
Touch Handlers ................................................................................................................................................ 200
AndroidInput: The Great Coordinator . ............................................................................................................. 207
AndroidGraphics and AndroidPixmap: Double Rainbow ...................................................................................... 209
Handling Different Screen Sizes and Resolutions ........................................................................................... 209
AndroidPixmap: Pixels for the People . ............................................................................................................ 215
AndroidGraphics: Serving Our Drawing Needs ............................................................................................... 216
AndroidFastRenderView: Loop, Strech, Loop, Stretch .................................................................................... 220
AndroidGame: Tying Everything Together . ........................................................................................................... 223
Summary .............................................................................................................................................................. 227
■Chapter 6: Mr. Nom Invades Android .......................................................... 229
Creating the Assets ............................................................................................................................................... 229
Setting Up the Project . ......................................................................................................................................... 232
MrNomGame: The Main Activity . ......................................................................................................................... 232
Assets: A Convenient Asset Store . .................................................................................................................. 233
Settings: Keeping Track of User Choices and High Scores ............................................................................. 234
LoadingScreen: Fetching the Assets from Disk .............................................................................................. 236
The Main Menu Screen . ....................................................................................................................................... 237
The HelpScreen Class(es) . ................................................................................................................................... 241
The High-Scores Screen . ..................................................................................................................................... 243
Rendering Numbers: An Excursion . ................................................................................................................ 243
Implementing the Screen . ............................................................................................................................... 245
Abstracting… ....................................................................................................................................................... 247
Abstracting the World of Mr. Nom: Model, View, Controller ........................................................................... 248
The GameScreen Class . .................................................................................................................................. 259
Summary .............................................................................................................................................................. 267
■Chapter 7: OpenGL ES: A Gentle Introduction .............................................. 269
What Is OpenGL ES and Why Should I Care? ....................................................................................................... 269
The Programming Model: An Analogy . ............................................................................................................ 270
Projections ....................................................................................................................................................... 272
Normalized Device Space and the Viewport ................................................................................................... 275
■ CONTENTS
viii
Matrices ......................................................................................................................................................... 275
The Rendering Pipeline .................................................................................................................................. 276
Before We Begin ................................................................................................................................................. 277
GLSurfaceView: Making Things Easy Since 2008 ............................................................................................... 278
GLGame: Implementing the Game Interface ....................................................................................................... 281
Look Mom, I Got a Red Triangle! ......................................................................................................................... 288
Defining the Viewport .................................................................................................................................... 288
Defining the Projection Matrix ....................................................................................................................... 289
Specifying Triangles ...................................................................................................................................... 292
Putting It Together ......................................................................................................................................... 296
Specifying Per Vertex Color ................................................................................................................................ 300
Texture Mapping: Wallpapering Made Easy ........................................................................................................ 304
Texture Coordinates ....................................................................................................................................... 304
Uploading Bitmaps ......................................................................................................................................... 306
Texture Filtering ............................................................................................................................................. 308
Disposing of Textures .................................................................................................................................... 309
A Helpful Snippet ........................................................................................................................................... 310
Enabling Texturing ......................................................................................................................................... 310
Putting It Together ......................................................................................................................................... 310
A Texture Class .............................................................................................................................................. 313
Indexed Vertices: Because Reuse Is Good for You .............................................................................................. 315
Putting It Together ......................................................................................................................................... 316
A Vertices Class ............................................................................................................................................. 318
Alpha Blending: I Can See Through You .............................................................................................................. 321
More Primitives: Points, Lines, Strips, and Fans ................................................................................................ 325
2D Transformations: Fun with the Model-View Matrix ....................................................................................... 326
World and Model Space ................................................................................................................................. 326
Matrices Again ............................................................................................................................................... 328
An First Example Using Translation ............................................................................................................... 329
More Transformations ................................................................................................................................... 333
Optimizing for Performance ................................................................................................................................ 338
Measuring Frame Rate ................................................................................................................................... 338
The Curious Case of the Hero on Android 1.5 ................................................................................................ 339
What’s Making My OpenGL ES Rendering So Slow? ...................................................................................... 340
Removing Unnecessary State Changes ......................................................................................................... 341
Reducing Texture Size Means Fewer Pixels to Be Fetched ........................................................................... 343
Reducing Calls to OpenGL ES/JNI Methods ................................................................................................... 344
The Concept of Binding Vertices .................................................................................................................... 345
In Closing ....................................................................................................................................................... 348
Summary ............................................................................................................................................................ 349
■Chapter 8: 2D Game Programming Tricks ................................................... 351
Before We Begin ................................................................................................................................................. 351
In the Beginning There Was the Vector ............................................................................................................... 352
Working with Vectors ..................................................................................................................................... 353
A Little Trigonometry ..................................................................................................................................... 355
Implementing a Vector Class ......................................................................................................................... 357
A Simple Usage Example ............................................................................................................................... 360
A Little Physics in 2D .......................................................................................................................................... 365
■ CONTENTS
ix
Newton and Euler, Best Friends Forever ....................................................................................................... 365
Force and Mass ............................................................................................................................................. 366
Playing Around, Theoretically ........................................................................................................................ 367
Playing Around, Practically ............................................................................................................................ 368
Collision Detection and Object Representation in 2D .......................................................................................... 372
Bounding Shapes ........................................................................................................................................... 373
Constructing Bounding Shapes ...................................................................................................................... 375
Game Object Attributes .................................................................................................................................. 377
Broad-Phase and Narrow-Phase Collision Detection ..................................................................................... 378
An Elaborate Example .................................................................................................................................... 386
A Camera in 2D ................................................................................................................................................... 399
The Camera2D Class ...................................................................................................................................... 402
An Example .................................................................................................................................................... 403
Texture Atlas: Because Sharing Is Caring ........................................................................................................... 405
An Example .................................................................................................................................................... 407
Texture Regions, Sprites, and Batches: Hiding OpenGL ES ................................................................................ 411
The TextureRegion Class ............................................................................................................................... 411
The SpriteBatcher Class ................................................................................................................................ 412
Sprite Animation ................................................................................................................................................. 422
The Animation Class ...................................................................................................................................... 423
An Example .................................................................................................................................................... 424
Summary ............................................................................................................................................................ 428
■Chapter 9: Super Jumper: A 2D OpenGL ES Game ....................................... 429
Core Game Mechanics ........................................................................................................................................ 429
A Backstory and Art Style ................................................................................................................................... 430
Screens and Transitions ..................................................................................................................................... 431
Defining the Game World .................................................................................................................................... 432
Creating the Assets ............................................................................................................................................. 435
The UI Elements ............................................................................................................................................. 435
Handling Text with Bitmap Fonts ................................................................................................................... 437
The Game Elements ....................................................................................................................................... 439
Texture Atlas to the Rescue ........................................................................................................................... 441
Music and Sound ........................................................................................................................................... 442
Implementing Super Jumper .............................................................................................................................. 444
The Assets Class ............................................................................................................................................ 444
The Settings Class ......................................................................................................................................... 447
The Main Activity ........................................................................................................................................... 448
The Font Class ............................................................................................................................................... 449
GLScreen ........................................................................................................................................................ 451
The Main Menu Screen .................................................................................................................................. 451
The Help Screens ........................................................................................................................................... 454
The High-Scores Screen ................................................................................................................................ 457
The Simulation Classes .................................................................................................................................. 459
The Game Screen ........................................................................................................................................... 475
The WorldRenderer Class .............................................................................................................................. 482
To Optimize or Not to Optimize ........................................................................................................................... 486
Summary ............................................................................................................................................................ 487
■ CONTENTS
x
■Chapter 10: OpenGL ES: Going 3D ................................................................ 489
Before We Begin ................................................................................................................................................. 489
Vertices in 3D ...................................................................................................................................................... 490
Vertices3: Storing 3D Positions ...................................................................................................................... 490
An Example .................................................................................................................................................... 492
Perspective Projection: The Closer, the Bigger ................................................................................................... 495
Z-buffer: Bringing Order into Chaos .................................................................................................................... 498
Fixing the Last Example ................................................................................................................................. 499
Blending: There’s Nothing Behind You .......................................................................................................... 500
Z-buffer Precision and Z-fighting ................................................................................................................... 503
Defining 3D Meshes ............................................................................................................................................ 504
A Cube: Hello World in 3D .............................................................................................................................. 505
An Example .................................................................................................................................................... 508
Matrices and Transformations Again .................................................................................................................. 511
The Matrix Stack ............................................................................................................................................ 512
Hierarchical Systems with the Matrix Stack .................................................................................................. 514
A Simple Camera System .............................................................................................................................. 520
Summary ............................................................................................................................................................ 524
■Chapter 11: 3D Programming Tricks ........................................................... 525
Before We Begin ................................................................................................................................................. 525
Vectors in 3D ....................................................................................................................................................... 526
Lighting in OpenGL ES ......................................................................................................................................... 530
How Lighting Works ....................................................................................................................................... 530
Light Sources ................................................................................................................................................. 532
Materials ........................................................................................................................................................ 533
How OpenGL ES Calculates Lighting: Vertex Normals ................................................................................... 533
In Practice ...................................................................................................................................................... 534
Some Notes on Lighting in OpenGL ES .......................................................................................................... 548
Mipmapping ........................................................................................................................................................ 548
Simple Cameras .................................................................................................................................................. 553
The First-Person or Euler Camera .................................................................................................................. 553
An Euler Camera Example ............................................................................................................................. 556
A Look-At Camera .......................................................................................................................................... 562
Loading Models ................................................................................................................................................... 564
The Wavefront OBJ Format ............................................................................................................................ 565
Implementing an OBJ Loader ......................................................................................................................... 566
Using the OBJ Loader .................................................................................................................................... 570
Some Notes on Loading Models .................................................................................................................... 571
A Little Physics in 3D .......................................................................................................................................... 571
Collision Detection and Object Representation in 3D .......................................................................................... 572
Bounding Shapes in 3D .................................................................................................................................. 572
Bounding Sphere Overlap Testing ................................................................................................................. 573
GameObject3D and DynamicGameObject3D .................................................................................................. 574
Summary ............................................................................................................................................................ 576
■Chapter 12: Droid Invaders: the Grand Finale ............................................. 577
Core Game Mechanics ........................................................................................................................................ 577
A Backstory and Art Style ................................................................................................................................... 579
■ CONTENTS
xi
Screens and Transitions ..................................................................................................................................... 580
Defining the Game World .................................................................................................................................... 581
Creating the Assets ............................................................................................................................................. 582
The UI Assets ................................................................................................................................................. 582
The Game Assets ........................................................................................................................................... 584
Sound and Music ........................................................................................................................................... 586
Plan of Attack ...................................................................................................................................................... 587
The Assets Class ................................................................................................................................................. 587
The Settings Class .............................................................................................................................................. 590
The Main Activity ................................................................................................................................................ 591
The Main Menu Screen ....................................................................................................................................... 592
The Settings Screen ............................................................................................................................................ 595
The Simulation Classes ....................................................................................................................................... 598
The Shield Class ............................................................................................................................................ 598
The Shot Class ............................................................................................................................................... 598
The Ship Class ............................................................................................................................................... 599
The Invader Class ........................................................................................................................................... 601
The World Class ............................................................................................................................................. 604
The GameScreen Class ....................................................................................................................................... 610
The WorldRender Class ....................................................................................................................................... 617
Optimizations ...................................................................................................................................................... 622
Summary ............................................................................................................................................................ 623
■Chapter 13: Publishing Your Game .............................................................. 625
A Word on Testing ............................................................................................................................................... 625
Becoming a Registered Developer ...................................................................................................................... 626
Sign Your Game’s APK ........................................................................................................................................ 627
Putting Your Game on the Market ....................................................................................................................... 631
Uploading Assets ........................................................................................................................................... 632
Listing Details ................................................................................................................................................ 633
Publishing Options ......................................................................................................................................... 633
Publish! .......................................................................................................................................................... 634
Marketing ....................................................................................................................................................... 634
The Developer Console ....................................................................................................................................... 634
Summary ............................................................................................................................................................ 636
■Chapter 14: What’s Next? ............................................................................ 637
Getting Social ...................................................................................................................................................... 637
Location Awareness ............................................................................................................................................ 637
Multiplayer Functionality .................................................................................................................................... 638
OpenGL ES 2.0 and More .................................................................................................................................... 638
Frameworks and Engines ................................................................................................................................... 638
Resources on the Web ........................................................................................................................................ 640
Closing Words ..................................................................................................................................................... 640
Index ............................................................................................................... 641
iv
Contents at a Glance
Contents .............................................................................................................. v
About the Author ............................................................................................... xii
About the Technical Reviewer ......................................................................... xiii
Acknowledgments ............................................................................................ xiv
Introduction ....................................................................................................... xv
■Chapter 1: Android, the New Kid on the Block ................................................ 1
■Chapter 2: First Steps with the Android SDK ................................................. 25
■Chapter 3: Game Development 101 ............................................................... 51
■Chapter 4: Android for Game Developers .................................................... 103
■Chapter 5: An Android Game Development Framework .............................. 185
■Chapter 6: Mr. Nom Invades Android .......................................................... 229
■Chapter 7: OpenGL ES: A Gentle Introduction .............................................. 269
■Chapter 8: 2D Game Programming Tricks ................................................... 351
■Chapter 9: Super Jumper: A 2D OpenGL ES Game ....................................... 429
■Chapter 10: OpenGL ES: Going 3D ................................................................ 489
■Chapter 11: 3D Programming Tricks ........................................................... 525
■Chapter 12: Droid Invaders: the Grand Finale ............................................. 577
■Chapter 13: Publishing Your Game .............................................................. 625
■Chapter 14: What’s Next? ............................................................................ 637
Index ............................................................................................................... 641
xv
Introduction
Hi there, and welcome to the world of Android game development. My name is Mario; I’ll be your
guide for the next fourteen chapters. You came here to learn about game development on
Android, and I hope to be the person who enables you to realize your ideas.
Together we’ll cover quite a range of materials and topics: Android basics, audio and
graphics programming, a little math and physics, and a scary thing called OpenGL ES. Based on
all this knowledge we’ll develop three different games, one even being 3D.
Game programming can be easy if you know what you’re doing. Therefore I’ve tried to
present the material in a way that not only gives you helpful code snippets to reuse, but actually
shows you the big picture of game development. Understanding the underlying principles is the
key to tackling ever more complex game ideas. You’ll not only be able to write games similar to
the ones developed over the course of this book, but you’ll also be equipped with enough
knowledge to go to the Web or the bookstore and take on new areas of game development on
your own.
A Word About the Target Audience
This book is aimed first and foremost at complete beginners in game programming. You don’t
need any prior knowledge on the subject matter; I’ll walk you through all the basics. However, I
need to assume a little knowledge on your end about Java. If you feel rusty on the matter, I’d
suggest refreshing your memory by reading the online edition of Thinking in Java, by Bruce Eckel
(Prentice Hall, 2006), an excellent introductory text on the programming language. Other than
that, there are no other requirements. No prior exposure to Android or Eclipse is necessary!
This book is also aimed at the intermediate-level game programmer that wants to get her
hands dirty with Android. While some of the material may be old news for you, there are still a lot
of tips and hints contained that should make reading this book worthwhile. Android is a strange
beast at times, and this book should be considered your battle guide.
How This Book Is Organized
This book takes an iterative approach in that we’ll slowly but surely work our way from the
absolute basics to the esoteric heights of hardware-accelerated game programming goodness.
Over the course of the chapters, we’ll build up a reusable code base, so I’d suggest going through
the chapters in sequence. More experienced readers can of course skip certain sections they feel
confident with. Just make sure to read through the code listings of sections you skim over a little,
so you will understand how the classes and interfaces are used in subsequent, more advanced
sections.
■ INTRODUCTION
xvi
Getting the Source Code
This book is fully self-contained; all the code necessary to run the examples and games is
included. However, copying the listings from the book to Eclipse is error prone, and games do not
consist of code alone, but also have assets that you can’t easily copy out of the book. Also, the
process of copying code from the book's text to Eclipse can introduce errors. Robert (the book’s
technical reviewer) and I took great care to ensure that all the listings in this book are error free,
but the gremlins are always hard at work.
To make this a smooth ride, I created a Google Code project that offers you the following:
• The complete source code and assets, licensed under the GPL version 3,
available from the project’s Subversion repository.
• A quickstart guide showing you how to import the projects into Eclipse in
textual form, and a video demonstration for the same.
• An issue tracker that allows you to report any errors you find, either in the
book itself or in the code accompanying the book. Once you file an issue in
the issue tracker, I can incorporate any fixes in the Subversion repository.
This way you’ll always have an up-to-date, (hopefully) error-free version of
this book’s code from which other readers can benefit as well.
• A discussion group that is free for everybody to join and discuss the
contents of the book. I’ll be on there as well of course.
For each chapter that contains code, there’s an equivalent Eclipse project in the Subversion
repository. The projects do not depend on each other, as we’ll iteratively improve some of the
framework classes over the course of the book. Each project therefore stands on its own. The code
for both Chapters 5 and 6 is contained in the ch06-mrnom project.
The Google Code project can be found at http://code.google.com/p/beginning-androidgames.
1
Chapter
Android, the New Kid on
the Block
As a kid of the early nineties, I naturally grew up with my trusty Nintendo Game Boy. I
spent countless hours helping Mario rescue the princess, getting the highest score in
Tetris, and racing my friends in RC Pro-Am via link cable. I took this awesome piece of
hardware with me everywhere and every time I could. My passion for games made me
want to create my own worlds and share them with my friends. I started programming
on the PC but soon found out that I couldn’t transfer my little masterpieces to the Game
Boy. I continued being an enthusiastic programmer, but over time my interest in actually
playing video games faded. Also, my Game Boy broke . . .
Fast forward to 2010. Smartphones are becoming the new mobile gaming platforms of
the era, competing with classic dedicated handheld systems such as the Nintendo DS
or the Playstation Portable. That caught my interest again, and I started investigating
which mobile platforms would be suitable for my development needs. Apple’s iOS
seemed like a good candidate to start coding games for. However, I quickly realized that
the system was not open, that I’d be able to share my work with others only if Apple
allowed it, and that I’d need a Mac to develop for the iOS. And then I found Android.
I immediately fell in love with Android. Its development environment works on all the
major platforms, no strings attached. It has a vibrant developer community happy to
help you with any problem you encounter as well as comprehensive documentation. I
can share my games with anyone without having to pay a fee to do so, and if I want to
monetize my work, I can easily publish my latest and greatest innovation to a global
market with millions of users in a matter of minutes.
The only thing I was left with was actually figuring out how to write games for Android
and how to transfer my PC game development knowledge to this new system. In the
following chapters, I want to share my experience with you and get you started with
Android game development. This is of course a rather selfish plan: I want to have more
games to play on the go!
Let’s start by getting to know our new friend: Android.
1
2 CHAPTER 1: Android, the New Kid on the Block
A Brief History of Android
Android was first publicly noticed in 2005 when Google acquired a small startup called
Android, Inc. This fueled speculation that Google wanted to enter the mobile space. In
2008, the release of version 1.0 of Android put an end to all speculation, and Android
became the new challenger on the mobile market. Since then, it’s been battling it out
with already established platforms such as iOS (then called iPhone OS) and BlackBerry,
and its chances of winning look rather good.
Because Android is open source, handset manufacturers have a low barrier of entry
when using the new platform. They can produce devices for all price segments,
modifying Android itself to accommodate the processing power of a specific device.
Android is therefore not limited to high-end devices but can also be deployed to lowbudget devices, thus reaching a wider audience.
A crucial ingredient for Android’s success was the formation of the Open Handset
Alliance (OHA) in late 2007. The OHA includes companies such as HTC, Qualcomm,
Motorola, and NVIDIA, which collaborate to develop open standards for mobile devices.
Although Android’s core is developed mainly by Google, all the OHA members
contribute to its source in one form or another.
Android itself is a mobile operating system and platform based on the Linux kernel
version 2.6 and is freely available for commercial and noncommercial use. Many
members of the OHA build custom versions of Android for their devices with modified
user interfaces (UIs)—for example, HTC’s HTC Sense and Motorola’s MOTOBLUR. The
open source nature of Android also enables hobbyists to create and distribute their own
versions of Android. These are usually called mods, firmwares, or ROMs. The most
prominent ROM at the time of this writing was developed by a fellow known as
Cyanogen and is aimed at bringing the latest and greatest improvements to all sorts of
Android devices.
Since its release in 2008, Android has received seven version updates, all code-named
after desserts (with the exception of Android 1.1, which is irrelevant nowadays). Each
version has added new functionality to the Android platform that has relevance in one
way or another for game developers. Version 1.5 (Cupcake) added support for including
native libraries in Android applications, which were previously restricted to being written
in pure Java. Native code can be very beneficial in situations where performance is of
upmost concern. Version 1.6 (Donut) introduced support for different screen resolutions.
We will revisit this fact a couple of times in this book because it has some impact on
how we approach writing games for Android. With version 2.0 (Éclair) came support for
multi-touch screens, and version 2.2 (Froyo) added just-in-time (JIT) compilation to the
Dalvik virtual machine (VM), which powers all the Java applications on Android. The JIT
speeds up the execution of Android applications considerably—depending on the
scenario, up to a factor of five. At the time of this writing, the latest version is 2.3, called
Gingerbread. It adds a new concurrent garbage collector to the Dalvik VM. If you haven’t
noticed yet: Android applications are written in Java.
A special version of Android, targeted at tablets, is also being released in 2011. It is
called Honeycomb and represents version 3.0 of Android. Honeycomb is not meant to
CHAPTER 1: Android, the New Kid on the Block 3
run on phones at this point. However, some features of Honeycomb will be ported to the
main line of Android. At the time of this writing, Android 3.0 is not available to the public,
and no devices on the market are running it. Android 2.3 can be installed on many
devices using custom ROMs. The only handset using Gingerbread is the Nexus S, a
developer phone sold by Google directly.
Fragmentation
The great flexibility of Android comes at a price: companies that opt to develop their
own user interfaces have to play catch-up with the fast pace at which new versions of
Android are released. This can lead to handsets not older than a few months becoming
outdated really fast as carriers and handset manufacturers refuse to create updates that
incorporate the improvements of new Android versions. The big bogeyman called
fragmentation is a result of this process.
Fragmentation has many faces. For the end user, it means being unable to install and
use certain applications and features because of being stuck on an old Android version.
For developers, it means that some care has to be taken when creating applications that
should work on all versions of Android. While applications written for earlier versions of
Android will usually run fine on newer versions, the reverse is not true. Some features
added in newer Android versions are of course not available on older versions, such as
multi-touch support. Developers are thus forced to create separate code paths for
different versions of Android.
But fear not. Although this sounds terrifying, it turns out that the measures that have to
be taken are minimal. Most often, you can even completely forget about the whole issue
and pretend there’s only a single version of Android. As game developers, we’re less
concerned with differences in APIs and more concerned about hardware capabilities.
This is a different form of fragmentation, which is also a problem for platforms such as
iOS, albeit not as pronounced. Throughout this book, I will cover the relevant
fragmentation issues that might get in your way while you develop your next game for
Android.
The Role of Google
Although Android is officially the brainchild of the Open Handset Alliance, Google is the
clear leader when it comes to implementing Android itself as well as providing the
necessary ecosystem for Android to grow.
The Android Open Source Project
Google’s efforts are summarized under the name Android Open Source Project. Most of
the code is licensed under Apache License 2, a very open and nonrestrictive license
compared to other open source licenses such as the GNU General Public License (GPL).
Everyone is free to use this source code to build their own systems. However, systems
that are claimed to be Android compatible first have to pass the Android Compatibility