Improving the camera
Our camera code works well; it follows the player wherever they fly. However, we can improve the camera to enhance the flying experience. In this section, we will add two new features:
- Zoom the camera out as Pierre Penguin flies higher, reinforcing the feeling of increasing height.
- Suspend vertical centering when the player drops below the halfway point of the screen. This means the ground never fills too much of the screen and adds the feeling of cutting upwards into the air when Pierre flies higher and the camera starts tracking him again.
Follow these steps to implement these two improvements:
- In
GameScene.swift
, create a new variable in theGameScene
class to store the center point of the screen:var screenCenterY:CGFloat = 0
- In the
didMove
function, set this new variable with the calculated center of the screen's height:// Store the vertical center of the screen: screenCenterY = self.size.height / 2
- We need to rework the
didSimulatePhysics
function significantly. Remove the existingdidSimulatePhysics
function and replace it with this code:override func didSimulatePhysics() { // Keep the camera locked at mid screen by default: var cameraYPos = screenCenterY cam.yScale = 1 cam.xScale = 1 // Follow the player up if higher than half the screen: if (player.position.y>screenCenterY) { cameraYPos = player.position.y // Scale out the camera as they go higher: let percentOfMaxHeight = (player.position.y - screenCenterY) / (player.maxHeight - screenCenterY) let newScale = 1 + percentOfMaxHeight cam.yScale = newScale cam.xScale = newScale } // Move the camera for our adjustment: self.camera!.position = CGPoint(x: player.position.x, y: cameraYPos) }
Run the project and then fly up. The world scales smaller as you gain height. The camera also now allows Pierre to dive below the center of the screen when you fly close to the ground. The following screenshot illustrates the two extremes.
Notice the smaller sprites here; Pierre flies higher and the camera zooms out:
In this screenshot, the camera stops following Pierre vertically as he approaches the ground:
The combined effect adds a lot of polish to the game and increases the fun of flying. Our flying mechanic feels great. The next step is to move Pierre forward through the world.