0

This is the code I have and I have a button that when I click it, I want to pause the game to show a menu... I have comments where the error is showing up, so you can hopefully see what I'm doing wrong.

Also I'm not sure if this code is supposed to be in my GameScene file, if not could you let me know which one it should be in.

Thanks for trying to help.

//
//  GameScene.swift
//  Pong2
//
//  Created by Hussain on 10/11/16.
//  Copyright © 2016 Archetapp. All rights reserved.
//

import SpriteKit
import GameplayKit

class GameScene: SKScene {

    var ball = SKSpriteNode()
    var enemy = SKSpriteNode()
    var main = SKSpriteNode()

    var topLbl = SKLabelNode()
    var btmLbl = SKLabelNode()

    var score = [Int]()

    @IBOutlet weak var pauseBetton: UIButton! // HERE IS MY OUTLET


    override func didMove(to view: SKView) {

        func pauseButton (sender: UIButton){ // HERE'S MY FUNCTION TO TRY AND PAUSE MY GAME
            let pauseAction = SKAction.run {
                GameScene.isPaused = true // HERE'S THE LINE I GET MY ERROR
                debugPrint("Paused")
            }
        }



        topLbl = self.childNode(withName: "topLabel") as! SKLabelNode
        btmLbl = self.childNode(withName: "btmLabel") as! SKLabelNode
        ball = self.childNode(withName: "ball") as! SKSpriteNode

        print(self.view?.bounds.height)

        enemy = self.childNode(withName: "enemy") as! SKSpriteNode
        enemy.position.y = (self.frame.height / 2) - 50

        main = self.childNode(withName: "main") as! SKSpriteNode
        main.position.y = (-self.frame.height / 2) + 50

        let border  = SKPhysicsBody(edgeLoopFrom: self.frame)

        border.friction = 0
        border.restitution = 1

        self.physicsBody = border

        startGame()
    }
}
rmaddy
  • 314,917
  • 42
  • 532
  • 579
husky
  • 11
  • 1
  • 5

1 Answers1

0

isPaused is an instance method, not a class method. You need to called it on a specific instance of a SKNode such as your GameScene instance.

Change GameScene.isPaused = true to self.isPaused = true or simply isPaused = true

Besides that issue, you need to move your pauseButton method from inside your didMove(to:) method.

func pauseButton (sender: UIButton) {
    let pauseAction = SKAction.run {
        self.isPaused = true
        debugPrint("Paused")
    }
}

override func didMove(to view: SKView) {
    topLbl = self.childNode(withName: "topLabel") as! SKLabelNode
    btmLbl = self.childNode(withName: "btmLabel") as! SKLabelNode
    ball = self.childNode(withName: "ball") as! SKSpriteNode

    print(self.view?.bounds.height)

    enemy = self.childNode(withName: "enemy") as! SKSpriteNode
    enemy.position.y = (self.frame.height / 2) - 50

    main = self.childNode(withName: "main") as! SKSpriteNode
    main.position.y = (-self.frame.height / 2) + 50

    let border  = SKPhysicsBody(edgeLoopFrom: self.frame)

    border.friction = 0
    border.restitution = 1

    self.physicsBody = border

    startGame()
}
rmaddy
  • 314,917
  • 42
  • 532
  • 579
  • Ok, thanks a-lot it fixed that error, but do you know why after I've done that it shows the error... "Implicit use of 'self' in closure; use 'self'. ta make capture semantics explicit"? – husky Nov 25 '17 at 10:36
  • If fixed the answer. Change `isPaused = true` to `self.isPaused = true`. – rmaddy Nov 25 '17 at 16:19