Siêu thị PDFTải ngay đi em, trời tối mất

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
PREMIUM
Số trang
673
Kích thước
26.5 MB
Định dạng
PDF
Lượt xem
1068

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-android￾games.

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 low￾budget 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

Tải ngay đi em, còn do dự, trời tối mất!