Making the components interact
Although the app is colorful and seeing the bird fly is fun, we need to create a scene like the real world, where collision with an obstacle typically brings you to a halt.
Setting up the collision detection engine
The SpriteKit physics engine provides us with a really simple mechanism to detect collisions between objects. Basically, we need to set a bitmask for each component, and then a collision detection delegate. Let start defining the bitmask; for it, we define an enumeration in GameScene
:
enum BodyType : UInt32 { case bird = 1 // 0b0001 case ground = 2 // 0b0010 case pipe = 4 // 0b0100 case gap = 8 // 0b1000 }
Pay attention to two things: the first is that we must define the bitmask as a power of 2; so that we can detect what touches what, using a bitwise or
operation. The second is that we've added a gap identifier, a component we haven't defined yet.
The gap is the hole between two pipes, and we need to detect the moment when...