Search icon CANCEL
Arrow left icon
Explore Products
Best Sellers
New Releases
Books
Videos
Audiobooks
Learning Hub
Conferences
Free Learning
Arrow right icon
Swift Game Development
Swift Game Development

Swift Game Development: Learn iOS 12 game development using SpriteKit, SceneKit and ARKit 2.0 , Third Edition

eBook
€20.98 €29.99
Paperback
€36.99
Subscription
Free Trial
Renews at €18.99p/m

What do you get with Print?

Product feature icon Instant access to your digital eBook copy whilst your Print order is Shipped
Product feature icon Paperback book shipped to your preferred address
Product feature icon Download this book in EPUB and PDF formats
Product feature icon Access this title in our online reader with advanced features
Product feature icon DRM FREE - Read whenever, wherever and however you want
Table of content icon View table of contents Preview book icon Preview Book

Swift Game Development

Chapter 2. Sprites, Camera, Action!

We will start our first game by learning how to draw shapes and textures on the screen. SpriteKit makes drawing simple by doing a lot of the hard work and exposing simple classes we can use for rendering. We are free to focus on building great gameplay experiences while SpriteKit performs the mechanical work of the game loop.

To draw an item on the screen, we need to create a new instance of a SpriteKit node. These nodes are simple; we attach a child node to our scene, or to existing nodes, for each item we want to draw. Sprites, particle emitters, and text labels are all considered nodes in SpriteKit.

Note

The game loop is a common game design pattern used to constantly update the game many times per second and maintain the same gameplay speed on fast or slow hardware. SpriteKit wires new nodes into the game loop automatically. As you gain expertise with SpriteKit, you may wish to explore the game loop further to understand what is going on &quot...

Preparing your project

There are three quick items to take care of before we start drawing. To begin the preparation, go through the following steps:

  1. Since we will design our game to use landscape screen orientations, we will have to disable the portrait view altogether:
  2. With your game project open in Xcode, select the overall Project folder in the project navigator (the uppermost item).
  3. You will see your project settings in the main frame of Xcode. Under Deployment Info, find the Device Orientation section.
  4. Uncheck the Portrait option, as shown in the following screenshot:
    Preparing your project
  5. We need to resize our scene to fit the new landscape view. Follow these steps to resize the scene:
    1. Open GameViewController.swift from the project navigator and locate the viewDidLoad function inside the GameViewController class. The viewDidLoad function is going to fire before the game realizes it is in landscape view, so we need to use a function that fires later in the startup process. Delete viewDidLoad completely, removing...

Drawing your first sprite

It is time to write some game code—fantastic! Open your GameScene.swift file and find the didMove function. Recall that this function fires every time the game switches to the GameScene. We will use this function to get familiar with the SKSpriteNode class. You will use SKSpriteNode extensively in your game whenever you want to add a new 2D graphic entity.

Tip

The term sprite refers to a 2D graphic or animation that moves around the screen independently from the background. Over time, the term has evolved to refer to any game object on the screen in a 2D game. We will create and draw your first sprite in this chapter: a happy little bee.

Building a SKSpriteNode class

Let's begin by drawing a blue square on the screen. The SKSpriteNode class can draw both texture graphics and solid blocks of color. It is often helpful to prototype your new game ideas with blocks of color before you spend time on artwork. To draw the blue square, add an instance of SKSpriteNode to the game:

Override func didMove(to view: SKView) { 
    // Make the scene position from its lower left 
    // corner, regardless of any other settings: 
self.anchorPoint = .zero 

    // Instantiate a constant, mySprite, instance of SKSpriteNode
    // The SKSpriteNode constructor can set color and size 
    // Note: UIColor is a UIKit class with built-in colorpresets
    // Note: CGSize is a type we use to set node sizes 
let mySprite = SKSpriteNode(color: .blue, size: 
CGSize(width: 50, height: 50)) 

    // Assign our sprite a position in points, relative to its 
    // parent node (in this case, the scene) 
mySprite.position = CGPoint(x: 150, y: 150) 
...

Animation—movement, scaling, and rotation

Before we dive back in to sprite theory, we should have some fun with our blue square. SpriteKit uses action objects to move sprites around the screen. Consider this example: if our goal is to move the square across the screen, we must first create a new action object to describe the animation. Then, we instruct our sprite node to execute the action. I will illustrate this concept with many examples in the chapter. For now, add this code in the didMove function, below the self.addChild(mySprite) line:

// Create a new constant for our action instance 
// Use the move action to provide a goal position for a node 
// SpriteKit will tween to the new position over the course of the 
// duration, in this case 5 seconds 
let demoAction = SKAction.move(to: CGPoint(x: 300, y: 150), 
duration: 3) 
// Tell our square node to execute the action! 
mySprite.run(demoAction) 

Run the project. You will see our blue square slide across the screen toward the...

The story on positioning

SpriteKit uses a grid of points to position nodes. In this grid, the bottom left corner of the scene is (0,0), with a positive x-axis to the right and a positive y-axis to the top.

Similarly, on the individual sprite level, (0,0) refers to the bottom-left corner of the sprite, while (1,1) refers to the top-right corner.

Alignment with anchor points

Each sprite has an anchorPoint property, or an origin. The anchorPoint property allows you to choose which part of the sprite aligns to the sprite's overall position.

Note

The default anchor point is (0.5,0.5), so a new SKSpriteNode centers perfectly on its position.

To illustrate this, let's examine the blue square sprite we just drew on the screen. Our sprite is 50 points wide and 50 points tall, and its position is (150,150). Since we have not modified the anchorPoint property, its anchor point is (0.5,0.5). This means that the sprite will be perfectly centered over the (150,150) position on the scene's grid...

Working with textures

You may want to take a screenshot of your blue box for your own enjoyment later. I absolutely love reminiscing over old screenshots of my finished games when they were nothing more than simple colored blocks sliding around the screen. Now, it is time to move past that stage and attach some fun artwork to our sprite.

Downloading the free assets

I am providing a downloadable pack for all of the art assets I use in this book. I recommend you use these assets so that you will have everything you need for our demo game. Alternatively, you are certainly free to create your own art for your game if you prefer.

More exceptional art assets

If you like the art assets, you can download over 20,000 game assets in the same style for a small donation at http://kenney.itch.io/kenney-donation. I do not have an affiliation with Kenney; I just find it admirable that he has released so much public domain artwork for indie game developers.

These assets are public domain, which means you can...

Designing for Retina

You may notice that our bee image is quite blurry. To take advantage of retina screens, assets need to be twice the pixel dimensions of their node's size property (for most retina screens), or three times the node size for the Plus versions of the iPhone. Ignore the height for a moment; our bee node is 100 points wide, but the PNG file is only 84 pixels wide. The PNG file needs to be 300 pixels wide to look sharp on Plus-sized iPhones, or 200 pixels wide to look sharp on 2X retina devices.

SpriteKit will automatically resize textures to fit their nodes, so one approach is to create a giant texture at the highest retina resolution (three times the node size) and let SpriteKit resize the texture down for lower density screens. However, there is a considerable performance penalty, and older devices can even run out of memory and crash from huge textures.

The ideal asset approach

These double and triple-sized retina assets can be confusing to new iOS developers. To solve...

Preparing your project


There are three quick items to take care of before we start drawing. To begin the preparation, go through the following steps:

  1. Since we will design our game to use landscape screen orientations, we will have to disable the portrait view altogether:

  2. With your game project open in Xcode, select the overall Project folder in the project navigator (the uppermost item).

  3. You will see your project settings in the main frame of Xcode. Under Deployment Info, find the Device Orientation section.

  4. Uncheck the Portrait option, as shown in the following screenshot:

  5. We need to resize our scene to fit the new landscape view. Follow these steps to resize the scene:

    1. Open GameViewController.swift from the project navigator and locate the viewDidLoad function inside the GameViewController class. The viewDidLoad function is going to fire before the game realizes it is in landscape view, so we need to use a function that fires later in the startup process. Delete viewDidLoad completely, removing...

Drawing your first sprite


It is time to write some game code—fantastic! Open your GameScene.swift file and find the didMove function. Recall that this function fires every time the game switches to the GameScene. We will use this function to get familiar with the SKSpriteNode class. You will use SKSpriteNode extensively in your game whenever you want to add a new 2D graphic entity.

Note

The term sprite refers to a 2D graphic or animation that moves around the screen independently from the background. Over time, the term has evolved to refer to any game object on the screen in a 2D game. We will create and draw your first sprite in this chapter: a happy little bee.

Building a SKSpriteNode class


Let's begin by drawing a blue square on the screen. The SKSpriteNode class can draw both texture graphics and solid blocks of color. It is often helpful to prototype your new game ideas with blocks of color before you spend time on artwork. To draw the blue square, add an instance of SKSpriteNode to the game:

Override func didMove(to view: SKView) { 
    // Make the scene position from its lower left 
    // corner, regardless of any other settings: 
self.anchorPoint = .zero 

    // Instantiate a constant, mySprite, instance of SKSpriteNode
    // The SKSpriteNode constructor can set color and size 
    // Note: UIColor is a UIKit class with built-in colorpresets
    // Note: CGSize is a type we use to set node sizes 
let mySprite = SKSpriteNode(color: .blue, size: 
CGSize(width: 50, height: 50)) 

    // Assign our sprite a position in points, relative to its 
    // parent node (in this case, the scene) 
mySprite.position = CGPoint(x: 150, y: 150) 

    /...
Left arrow icon Right arrow icon
Download code icon Download Code

Key benefits

  • Learn to create games for iPhone and iPad with the latest Swift Programming language
  • Understand the fundamental concepts of game development like game physics, camera action, sprites, controls, among others
  • Build Augmented reality games using ARKit for true performance

Description

Swift is the perfect choice for game development. Developers are intrigued by Swift and want to make use of new features to develop their best games yet. Packed with best practices and easy-to-use examples, this book leads you step by step through the development of your first Swift game. The book starts by introducing Swift's best features – including its new ones for game development. Using SpriteKit, you will learn how to animate sprites and textures. Along the way, you will master physics, animations, and collision effects and how to build the UI aspects of a game. You will then work on creating a 3D game using the SceneKit framework. Further, we will look at how to add monetization and integrate Game Center. With iOS 12, we see the introduction of ARKit 2.0. This new version allows us to integrate shared experiences such as multiplayer augmented reality and persistent AR that is tied to a specific location so that the same information can be replicated on all connected devices. In the next section, we will dive into creating Augmented Reality games using SpriteKit and SceneKit. Then, finally, we will see how to create a Multipeer AR project to connect two devices, and send and receive data back and forth between those devices in real time. By the end of this book, you will be able to create your own iOS games using Swift and publish them on the iOS App Store.

Who is this book for?

If you wish to create and publish iOS games using Swift, then this book is for you. No prior game development or experience with Apple ecosystem is needed.

What you will learn

  • Deliver powerful graphics, physics, and sound in your game by using SpriteKit and SceneKit
  • Set up a scene using the new capabilities of the scene editor and custom classes
  • Maximize gameplay with little-known tips and strategies for fun, repeatable action
  • Make use of animations, graphics, and particles to polish your game
  • Understand the current mobile monetization landscape
  • Integrate your game with Game Center
  • Develop 2D and 3D Augmented Reality games using Apple s new ARKit framework
  • Publish your game to the App Store
Estimated delivery fee Deliver to Denmark

Premium delivery 7 - 10 business days

€17.95
(Includes tracking information)

Product Details

Country selected
Publication date, Length, Edition, Language, ISBN-13
Publication date : Sep 28, 2018
Length: 434 pages
Edition : 3rd
Language : English
ISBN-13 : 9781788471152
Languages :
Tools :

What do you get with Print?

Product feature icon Instant access to your digital eBook copy whilst your Print order is Shipped
Product feature icon Paperback book shipped to your preferred address
Product feature icon Download this book in EPUB and PDF formats
Product feature icon Access this title in our online reader with advanced features
Product feature icon DRM FREE - Read whenever, wherever and however you want
Estimated delivery fee Deliver to Denmark

Premium delivery 7 - 10 business days

€17.95
(Includes tracking information)

Product Details

Publication date : Sep 28, 2018
Length: 434 pages
Edition : 3rd
Language : English
ISBN-13 : 9781788471152
Languages :
Tools :

Packt Subscriptions

See our plans and pricing
Modal Close icon
€18.99 billed monthly
Feature tick icon Unlimited access to Packt's library of 7,000+ practical books and videos
Feature tick icon Constantly refreshed with 50+ new titles a month
Feature tick icon Exclusive Early access to books as they're written
Feature tick icon Solve problems while you work with advanced search and reference features
Feature tick icon Offline reading on the mobile app
Feature tick icon Simple pricing, no contract
€189.99 billed annually
Feature tick icon Unlimited access to Packt's library of 7,000+ practical books and videos
Feature tick icon Constantly refreshed with 50+ new titles a month
Feature tick icon Exclusive Early access to books as they're written
Feature tick icon Solve problems while you work with advanced search and reference features
Feature tick icon Offline reading on the mobile app
Feature tick icon Choose a DRM-free eBook or Video every month to keep
Feature tick icon PLUS own as many other DRM-free eBooks or Videos as you like for just €5 each
Feature tick icon Exclusive print discounts
€264.99 billed in 18 months
Feature tick icon Unlimited access to Packt's library of 7,000+ practical books and videos
Feature tick icon Constantly refreshed with 50+ new titles a month
Feature tick icon Exclusive Early access to books as they're written
Feature tick icon Solve problems while you work with advanced search and reference features
Feature tick icon Offline reading on the mobile app
Feature tick icon Choose a DRM-free eBook or Video every month to keep
Feature tick icon PLUS own as many other DRM-free eBooks or Videos as you like for just €5 each
Feature tick icon Exclusive print discounts

Frequently bought together


Stars icon
Total 115.97
Hands-On Design Patterns with Swift
€36.99
Mastering iOS 12 Programming
€41.99
Swift Game Development
€36.99
Total 115.97 Stars icon

Table of Contents

19 Chapters
1. Designing Games with Swift Chevron down icon Chevron up icon
2. Sprites, Camera, Action! Chevron down icon Chevron up icon
3. Mix in the Physics Chevron down icon Chevron up icon
4. Adding Controls Chevron down icon Chevron up icon
5. Spawning Enemies, Coins, and Power-Ups Chevron down icon Chevron up icon
6. Generating a Never-Ending World Chevron down icon Chevron up icon
7. Implementing Collision Events Chevron down icon Chevron up icon
8. Polishing to a Shine – HUD, Parallax Backgrounds, Particles, and More Chevron down icon Chevron up icon
9. Adding Menus and Sounds Chevron down icon Chevron up icon
10. Standing out in the Crowd with Advanced Features Chevron down icon Chevron up icon
11. Introduction to SceneKit Chevron down icon Chevron up icon
12. Choosing a Monetization Strategy Chevron down icon Chevron up icon
13. Integrating with Game Center Chevron down icon Chevron up icon
14. Introduction to Spritekit with ARKit Chevron down icon Chevron up icon
15. Introduction to Scenekit with ARKit Chevron down icon Chevron up icon
16. Publishing the Game on the App Store Chevron down icon Chevron up icon
17. Multipeer Augmented Reality Chevron down icon Chevron up icon
Other Books You May Enjoy Chevron down icon Chevron up icon
Index Chevron down icon Chevron up icon

Customer reviews

Rating distribution
Full star icon Full star icon Half star icon Empty star icon Empty star icon 2.7
(3 Ratings)
5 star 0%
4 star 33.3%
3 star 0%
2 star 66.7%
1 star 0%
Gerard Jan 22, 2020
Full star icon Full star icon Full star icon Full star icon Empty star icon 4
I'm ½ way through the book. It covers the basics of SpriteKit. It's enough to use as a jump off point to more complex work. I think if the book dug deeper into why things are as they are that it would provide more insight. Hope the authors keep improving this book in the next edition.
Amazon Verified review Amazon
Aaron Berlow Jun 23, 2020
Full star icon Full star icon Empty star icon Empty star icon Empty star icon 2
While the writing is very good and can give you an idea about Sprite kit, the code provided is unworkable. Even the code provided by the publisher through their website doesn't work. Do not waste your time on this book and go for something more updated and well-managed
Amazon Verified review Amazon
Bart Nov 06, 2018
Full star icon Full star icon Empty star icon Empty star icon Empty star icon 2
It seems that SceneKit was just shoe-horned into this book without much review or thought. If it had been done as the first part about SpriteKit, then this book would have had more promise. It seems the person in charge of reviewing the content of this book absolutely failed. If you want SpriteKit information, this book does an ok job. Very disappointing that more care was not taken with the production of this book and its contents...
Amazon Verified review Amazon