【问题标题】:I constantly get the error 'Instance member isPaused cannot be used on type GameScene'我经常收到错误'Instance member isPaused cannot be used on type GameScene'
【发布时间】:2017-11-23 23:04:45
【问题描述】:

这是我拥有的代码,我有一个按钮,当我点击它时,我想暂停游戏以显示一个菜单...我有错误出现的 cmets,所以你可以希望看到我的内容我做错了。

另外我不确定这段代码是否应该在我的 GameScene 文件中,如果不是,请告诉我应该在哪个文件中。

感谢您的帮助。

//
//  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()
    }
}

【问题讨论】:

    标签: ios swift sprite-kit gameplay-kit


    【解决方案1】:

    isPaused 是实例方法,而不是类方法。您需要在 SKNode 的特定实例上调用它,例如您的 GameScene 实例。

    GameScene.isPaused = true 更改为self.isPaused = true 或简单地isPaused = true

    除了这个问题,您需要将 pauseButton 方法从 didMove(to:) 方法中移出。

    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()
    }
    

    【讨论】:

    • 好的,非常感谢它修复了这个错误,但你知道为什么在我完成后它显示错误...“在闭包中隐式使用'self';使用'self '. 让捕获语义明确”?
    • 如果修复了答案。将isPaused = true 更改为self.isPaused = true
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-02
    • 2022-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-06
    相关资源
    最近更新 更多