Games rule mobile devices. The iPhone, iPad, and iPod touch are all phenomenally powerful gaming platforms, and making amazing games that your players can access at a moment’s notice has never been easier. The iTunes App Store category with the most apps is Games; it includes games ranging from simple one-minute puzzle games to in-depth, long-form adventures. The time to jump in and make your own games has never been better. We say this having been in iOS game development since the App Store opened. Our first iOS game, in 2008, a little strategy puzzler named Culture, led us to working on hundreds of other awesome projects, ranging from a digital board game for museums to educational children’s games, and everything in between! The possibilities for games on this platform are only becoming wider and wider.
This book provides you with simple, direct solutions to common problems found in iOS game programming using Swift. Whether you’re stuck figuring out how to give objects physical motion, or how to handle Game Center, or just want a refresher on common gaming-related math problems, you’ll find simple, straightforward answers, explanations, and sample projects. This book is part tutorial and part reference. It’s something you’ll want to keep handy to get new ideas about what’s possible through a series of recipes, as well as for a quick guide to find answers on a number of topics.
We assume that you’re a reasonably capable programmer, and that you know at least a little bit about developing for iOS: what Xcode is and how to get around in it, how to use the iOS Simulator, and the basics of the Swift programming language. We also assume you know how to use an iOS device. We don’t assume any existing knowledge of game development on any platform, but we’re guessing that you’re reading this book with a vague idea about the kind of game you’d like to make.
This book isn’t based on any particular genre of games—you’ll find the recipes in it applicable to all kinds of games, though some will suit some genres more than others.
Organization of This Book
Each chapter of this book contains recipes: short solutions to common problems found in game development. The book is designed to be read in any order; you don’t need to read it cover-to-cover, and you don’t need to read any chapter from start to finish. (Of course, we encourage doing that, because you’ll probably pick up on stuff you didn’t realize you wanted to know.)
Each recipe is structured like this: the problem being addressed is presented, followed by the solution, which explains the technique of solving the problem (or implementing the feature, and so on). Following the solution, the recipe contains a discussion that goes into more detail on the solution, which gives you more information about what the solution does, other things to watch out for, and other useful knowledge.
Here is a concise breakdown of the material each chapter covers:
- Chapter 1, Laying Out a Game
- This chapter discusses different ways to design the architecture and code layout of your game, how to work with timers in a variety of ways, and how blocks work in iOS. You’ll also learn how to schedule work to be performed in the future using blocks and operation queues, and how to add unit tests to your project.
- Chapter 2, Views and Menus
- This chapter focuses on interface design and working with UIKit, the built-in system for displaying user interface graphics. In addition to providing common objects like buttons and text fields, UIKit can be customized to suit your needs—for some kinds of games, UIKit might be the only graphical tool you’ll need.
- Chapter 3, Input
- In this chapter, you’ll learn how to get input from the user so that you can apply it to your game. This includes touching the screen, detecting different types of gestures (such as tapping, swiping, and pinching), as well as other kinds of input like the user’s current position on the planet, or motion information from the variety of built-in sensors in the device.
- Chapter 4, Sound
- This chapter discusses how to work with sound effects and music. You’ll learn how to load and play audio files, how to work with the user’s built-in music library, and how to make your game’s sound work well when the user wants to listen to his or her music while playing your game.
- Chapter 5, Data Storage
- This chapter is all about storing information for later use. The information that games need to save ranges from the very small (such as high scores), to medium (saved games), all the way up to very large (collections of game assets). In this chapter, you’ll learn about the many different ways that information can be stored and accessed, and which of these is best suited for what you want to do.
- Chapter 6, 2D Graphics and Sprite Kit
- This chapter discusses Sprite Kit, the 2D graphics system built into iOS. Sprite Kit is both powerful and very easy to use; in this chapter, you’ll learn how to create a scene, how to animate sprites, and how to work with textures and images. This chapter also provides you with info you can use to brush up on your 2D math skills.
- Chapter 7, Physics
- In this chapter, you’ll learn how to use the two-dimensional physics simulation that’s provided as part of Sprite Kit. Physics simulation is a great way to make your game’s movements feel more realistic, and you can use it to get a lot of great-feeling game for very little programmer effort. You’ll learn how to work with physics bodies, joints, and forces, as well as how to take user input and make it control your game’s physical simulation.
- Chapter 8, 3D Graphics
- This chapter and the two that follow it provide a tutorial on OpenGL ES 2, the 3D graphics system used on iOS. These three chapters follow a slightly different structure than the rest of the book, because it’s not quite as easy to explain parts of OpenGL in isolation. Instead, these chapters follow a more linear approach, and we recommend that you read the recipes in order so that you can get the best use out of them. Chapter 8 introduces the basics of OpenGL, and shows you how to draw simple shapes on the screen; at the same time, the math behind the graphics is explained.
- Chapter 9, Intermediate 3D Graphics
- This chapter is designed to follow on from the previous, and discusses more advanced techniques in 3D graphics. You’ll learn how to load a 3D object from a file, how to animate objects, and how to make a camera that moves around in 3D space.
- Chapter 10, Advanced 3D Graphics
- This chapter follows on from the previous two, and focuses on shaders, which give you a tremendous amount of control over how objects in your game look. You’ll learn how to write shader code, how to create different shading effects (including diffuse and specular lighting, cartoon shading, and more), and how to make objects transparent.
- Chapter 11, Scene Kit
- This chapter covers Scene Kit, Apple’s new 3D framework. It has recipes for showing 3D objects with Scene Kit; working with cameras, lights, and textures; and using physics in 3D.
- Chapter 12, Artificial Intelligence and Behavior
- This chapter discusses how to make objects in your game behave on their own, and react to the player. You’ll learn how to make one object chase another, how to make objects flee from something, and how to work out a path from one point to another while avoiding obstacles.
- Chapter 13, Networking and Social Media
- In this chapter, you’ll learn about Game Center, the social network and match-making system built into iOS. You’ll learn how to get information about the player’s profile, as well as let players connect to their friends. On top of this, you’ll also learn how to connect to nearby devices using Bluetooth. Finally, you’ll learn how to share text, pictures, and other content to social media sites like Twitter and Facebook.
- Chapter 14, Game Controllers and External Screens
- This chapter discusses the things that players can connect to their device: external displays, like televisions and monitors, and game controllers that provide additional input methods like thumbsticks and physical buttons. You’ll learn how to detect, use, and design your game to take advantage of additional hardware where it’s present.
- Chapter 15, Performance and Debugging
- The last chapter of the book looks at improving your game’s performance and stability. You’ll learn how to take advantage of advanced Xcode debugging features, how to use compressed textures to save memory, and how to make your game load faster.
You can download the code samples from this book (or fork using GitHub) at http://www.secretlab.com.au/books/ios-game-dev-cookbook-swift.
O’Reilly has a number of other excellent books on game development and software development (both generally and related to iOS) that can help you on your iOS game development journey, including:
We strongly recommend that you add Gamasutra to your regular reading list, due to its high-quality coverage of game industry news.
Game designer Marc LeBlanc’s website is where he collects various presentations, notes, and essays. We’ve found him to be a tremendous inspiration.
Finally, we’d be remiss if we didn’t link to our own blog.
Conventions Used in This Book
The following typographical conventions are used in this book:
- Indicates new terms, URLs, email addresses, filenames, and file extensions.
- Used for program listings, as well as within paragraphs to refer to program elements such as variable or function names, databases, data types, environment variables, statements, and keywords.
Constant width bold
- Shows commands or other text that should be typed literally by the user.
Constant width italic
- Shows text that should be replaced with user-supplied values or by values determined by context.
This element signifies a tip or suggestion.
This element signifies a general note.
This element indicates a warning or caution.
Using Code Examples
Supplemental material (code examples, exercises, etc.) is available for download at http://www.secretlab.com.au/books/ios-game-dev-cookbook-swift.
This book is here to help you get your job done. In general, if example code is offered with this book, you may use it in your programs and documentation. You do not need to contact us for permission unless you’re reproducing a significant portion of the code. For example, writing a program that uses several chunks of code from this book does not require permission. Selling or distributing a CD-ROM of examples from O’Reilly books does require permission. Answering a question by citing this book and quoting example code does not require permission. Incorporating a significant amount of example code from this book into your product’s documentation does require permission.
We appreciate, but do not require, attribution. An attribution usually includes the title, author, publisher, and ISBN. For example: “iOS Swift Game Development Cookbook by Jonathon Manning and Paris Buttfield-Addison (O’Reilly). Copyright 2015 Secret Lab, 978-1-449-92080-0.”
If you feel your use of code examples falls outside fair use or the permission given above, feel free to contact us at email@example.com.
Safari® Books Online
Technology professionals, software developers, web designers, and business and creative professionals use Safari Books Online as their primary resource for research, problem solving, learning, and certification training.
Members have access to thousands of books, training videos, and prepublication manuscripts in one fully searchable database from publishers like O’Reilly Media, Prentice Hall Professional, Addison-Wesley Professional, Microsoft Press, Sams, Que, Peachpit Press, Focal Press, Cisco Press, John Wiley & Sons, Syngress, Morgan Kaufmann, IBM Redbooks, Packt, Adobe Press, FT Press, Apress, Manning, New Riders, McGraw-Hill, Jones & Bartlett, Course Technology, and hundreds more. For more information about Safari Books Online, please visit us online.
How to Contact Us
Please address comments and questions concerning this book to the publisher:
|O’Reilly Media, Inc.|
|1005 Gravenstein Highway North|
|Sebastopol, CA 95472|
|800-998-9938 (in the United States or Canada)|
|707-829-0515 (international or local)|
We have a web page for this book, where we list errata, examples, and any additional information. You can access this page at http://bit.ly/ios_game_dev_cookbook_swift.
To comment or ask technical questions about this book, send email to firstname.lastname@example.org.
For more information about our books, courses, conferences, and news, see our website at http://www.oreilly.com.
Find us on Facebook: http://facebook.com/oreilly
Follow us on Twitter: http://twitter.com/oreillymedia
Watch us on YouTube: http://www.youtube.com/oreillymedia
Jon thanks his mother, father, and the rest of his weirdly extended family for their tremendous support.
Paris thanks his mother, whose credit card bankrolled literally hundreds of mobile devices through his childhood—an addiction that, in all likelihood, created the gadget-obsessed monster he is today. He can’t wait to read her upcoming novel.
Thank you to our editor, Rachel Roumeliotis, who kept the book under control and provided a ton of useful advice on content. We know it was a ton because we measured it. Likewise, all the O’Reilly Media staff and contractors we’ve worked with over the course of writing the book have been absolutely fantastic, and every one of them made this book better for having had them work on it. Thank you also to Brian Jepson, our first editor at O’Reilly.
A huge thank you to Tony Gray and the AUC for the monumental boost they gave us and many others listed on this page. We wouldn’t be working in this industry, let alone writing this book, if it wasn’t for Tony and the AUC community.
Thanks also to Neal Goldstein, who richly deserves all of the credit and/or blame for getting both of us into the whole book-writing racket.
We’d like to acknowledge the support of the goons at Maclab, who still know who they are and still continue to stand watch for Admiral Dolphin’s inevitable apotheosis, as well as Professor Christopher Lueg, Dr Leonie Ellis, and the rest of the staff at the University of Tasmania for putting up with us.
Additional thanks to Tim N, Nic W, Andrew B, Jess L, and Rex S for a wide variety of reasons. Thanks also to Ash Johnson, for even more reasons.
Finally, very special thanks to Steve Jobs, without whom this book (and many others like it) would not have reason to exist.