Real-World Flash Game Development


Real-World Flash Game Development      Download



CONTENTS
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi
Chapter 1 Computer Science Isn’t for Everyone . . . . . . . . . . . . . . . . . 1
A Little Groundwork . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
Common Game Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
General Development Terms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Game-Specific Development Terms . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Flash Development Terms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
You Can Wake Up Now. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Chapter 2 The Best Tool for the Job . . . . . . . . . . . . . . . . . . . . . . . . 13
Flash Back . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
The Case for Flash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Nobody’s Perfect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Stop Fighting It . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Things Flash Was Built to Do . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
The Best Tool for the Job . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Chapter 3 A Plan is Worth a Thousand Aspirin. . . . . . . . . . . . . . . . . 25
Step 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Step 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Step 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Step 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Step 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Step 6 (Optional) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Chapter 4 //Comments FTW!. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Fair Warning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Part 1: Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Part 2: Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
Part 3: Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Part 4: Data Structures and Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
Part 5: Keep Your Comments to Everyone Else! . . . . . . . . . . . . . . . . . 67
Part 6: Why Does Flash Do That? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
Chapter 5 The Least You Can Do versus an Architect’s Approach . . . 77
Basic Encapsulation: Classes and Containers . . . . . . . . . . . . . . . . . . . 78
Store Relevant Values as Variables and Constants . . . . . . . . . . . . . . . 79
Don’t Rely on Your Stage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Don’t Use Frameworks or Patterns You Don’t Understand
or That Don’t Apply . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Know When It’s Okay to Phone It In and When It Definitely Isn’t. . . . 81
Transitioning to Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
OOP Concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
Practical OOP in Game Development . . . . . . . . . . . . . . . . . . . . . . . . . 85
The Singleton: A Good Document Pattern . . . . . . . . . . . . . . . . . . . . . . 86
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
Chapter 6 Managing Your Assets and Working with Graphics . . . . . 91
A Better File Format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
A Few Words about Organization . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Working with Graphics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
Raster Formats to Use . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
Key Points to Remember . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
Chapter 7 Make It Move—ActionScript Animation . . . . . . . . . . . . . 103
A Little Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
To Tween or Not to Tween? Is That a Question? . . . . . . . . . . . . . . . . 105
A Simple Scripted Shooter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
Memory: Tweening Animation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
Chapter 8 Turn It up to 11: Working with Audio . . . . . . . . . . . . . . . 117
Formats to Use . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
Export Settings to Use . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
Using External Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
Tools for Working with Sounds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
Scripting Sounds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
Chapter 9 Put the Video Back in “Video Game” . . . . . . . . . . . . . . . 141
Video Codecs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
External Video Uses: Cutscenes and Menus . . . . . . . . . . . . . . . . . . . 142
CutsceneManager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
Video on the Timeline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
Setting Up an Internal Video . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
Chapter 10 XML and Dynamic Content . . . . . . . . . . . . . . . . . . . . . . 157
Bringing Data In: Understanding the URLLoader Class . . . . . . . . . . . 157
XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
E4X. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
Crossword Puzzle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
Content Is a Two-Way Street: A Crossword Builder . . . . . . . . . . . . . . 179
Sending Data Back Out . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
One More Example: XML versus Flash Vars . . . . . . . . . . . . . . . . . . . 181
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
Chapter 11 Four-Letter Word: M-A-T-H . . . . . . . . . . . . . . . . . . . . . . 183
The Math Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
Part One: Geometry and Trigonometry . . . . . . . . . . . . . . . . . . . . . . . 184
A Quick Explanation of Radians and Pi . . . . . . . . . . . . . . . . . . . . . . . 188
3D in Flash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
Perspective Projection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
The SimpleTunnelShooter Example . . . . . . . . . . . . . . . . . . . . . . . . . . 196
Part Two: Physics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
Example: A Top–Down Driving Engine . . . . . . . . . . . . . . . . . . . . . . . 214
Example: Top–Down Driving Game with Drift . . . . . . . . . . . . . . . . . . 223
Review . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
Chapter 12 Don’t Hit Me: Collision Detection Techniques . . . . . . . . 227
What You Can Do versus What You Need . . . . . . . . . . . . . . . . . . . . . 227
HitTestObject—The Most Basic Detection . . . . . . . . . . . . . . . . . . . . . 228
HitTestPoint—One Step up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
Radius/Distance Testing—Great for Circles . . . . . . . . . . . . . . . . . . . . 234
Rect Testing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
Pixel-Perfect Collision Detection and Physics . . . . . . . . . . . . . . . . . . . 241
When All Else Fails, Mix ’N Match . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
Chapter 13 MixUp—A Simple Engine. . . . . . . . . . . . . . . . . . . . . . . 243
The Main Document . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
The MixUp Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
The Title Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
The RulesPanel Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
The Game Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
The Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254
The GameBoard Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
The SourceImageEmbedded Class . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
The GameHistory and Results Classes . . . . . . . . . . . . . . . . . . . . . . . . 265
The SourceImageCamera Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
Review. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
Chapter 14 Bringing It All Together: A Platformer . . . . . . . . . . . . . . 271
The Platformer Genre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
Data Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
The Game Flow and Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
The Level File Format and Asset Structure . . . . . . . . . . . . . . . . . . . . 275
The Engine Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
The IWall Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
The CollisionGrid Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
The Game Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308
The Asset Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310
Taking It Further . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
Chapter 15 Marble Runner: Our First Mobile Game . . . . . . . . . 319
Part 1: Best Practices for iOS Games . . . . . . . . . . . . . . . . . . . . . . . . . 320
The GPU Is Here to Help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
Code Matters, Too . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326
A Question of Balance: Inheritance versus Interfaces . . . . . . . . . . . . 331
A Real-World Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332
Part 2: Marble Runner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338
The Accelerometer Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339
How Accelerometer Values Are Computed . . . . . . . . . . . . . . . . . . . . 340
The Game: Marble Runner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342
Design Considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369
Where to Take It . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370
Chapter 16 Air Hockey: A Multitouch, Multiplayer Tablet Game . . . 373
A Trio of Topics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374
Multitouch Input for Devices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374
The Finite-State Machine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375
Physics Simulation with Box2D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376
The Game: Two-Player Air Hockey . . . . . . . . . . . . . . . . . . . . . . . . . . 377
Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406
Afterword: Flash’s Future in Games. . . . . . . . . . . . . . . . . . . . . . . . . . 407
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409
Bonus Chapter 1 Squash ‘Em If You’ve Got ‘Em: The Bug Hunt. . . . . 1
Bugs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Performance and Optimization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Bonus Chapter 2 On Your Guard . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Malicious Use . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Data Protection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
SWF Protection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Bonus Chapter 3 Introduction to Mobile Development . . . . . . . . . . . 29
Mobile: The New Hotness . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Something Old, Something New. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Getting from A to iOS: The Pipeline . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Our First iPhone Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Only the Beginning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Changing the Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
The End of the Starting Point . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
Appendix A Webcams and Microphones . . . . . . . . . . . . . . . . . . . . . 53
Testing 1, 2, 3: The Microphone Object . . . . . . . . . . . . . . . . . . . . . . . . 53
Lights, Camera Object, ActionScript! . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
Appendix B Localization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Key Points to Remember . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Localization in Flash CS5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Appendix C JSFL is JavaScript for Lovers. . . . . . . . . . . . . . . . . . . . 70
Writing JSFL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
Custom Panels and MMExecute . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
Appendix D Using AMFPHP with Games . . . . . . . . . . . . . . . . . . . . . 77
Setting up AMFPHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Setting up the Database Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
The HighScores Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81