Group Group Group Group Group Group Group Group Group Forums

Video Tutorial: How to Make a Game Like Flappy Bird in Swift Part 1: Getting Started

Learn how to create a Sprite Kit project and add the background.

This is a companion discussion topic for the original entry at

Hi Tammy,
I added the code in GameScene.swift according to your video, but the foreground image is not getting displayed. Can you take a quick look? I seem not to find the mistake.

When I try to print “playableStart” to the console, I get -96.0 as a value on a iPhone4S. Maybe this helps?

Additionally I must say, that at the point when I am adding the background, the image is scaled far beyond the actual screen size and uses the complete screen size, although I have the correct saleMode of .AspectFill.

Here is my code `

import SpriteKit

enum Layer: CGFloat {
case Background
case Foreground

class GameScene: SKScene {

let worldNode = SKNode()

var playableStart: CGFloat = 0
var playableHeight: CGFloat = 0

override func didMoveToView(view: SKView) {
    /* Setup your scene here */

// MARK: Setup methods

func setupBackground() {
    let background = SKSpriteNode(imageNamed: "Background")
    background.anchorPoint = CGPoint(x: 0.5, y: 1.0)
    background.position = CGPoint(x: size.width/2, y: size.height)
    background.zPosition = Layer.Background.rawValue
    playableStart = size.height - background.size.height
    playableHeight = background.size.height

func setupForeground() {
    let foreground = SKSpriteNode(imageNamed: "Ground")
    foreground.anchorPoint = CGPoint(x: 0.0, y: 1.0)
    foreground.position = CGPoint(x: 0, y: playableStart)
    foreground.zPosition = Layer.Foreground.rawValue

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
   /* Called when a touch begins */

override func update(currentTime: CFTimeInterval) {
    /* Called before each frame is rendered */


I found my mistake,… I did not calculate the scene bounds correctly in my GameViewController when setting up the scene. Sorry for that,…