【问题标题】:How to refrence another variable from different clases in Swift如何在 Swift 中引用来自不同类的另一个变量
【发布时间】:2014-07-19 04:01:51
【问题描述】:

所以我试图在一个名为 PlayScene 的类中的不同文件中引用一个名为 high score 的变量。我如何在我的 GameScene.swift 文件中引用那个高分。这是我目前的 GameScene.swift 文件,但与

self.highscoreText.text = "Highscore: \(highscoreshow)

它说 highscoreshow 是一个未解析的标识符,因为我不知道如何从另一个类引用该变量

import SpriteKit

class GameScene: SKScene {

    let playButton = SKSpriteNode(imageNamed:"play")
    let title = SKSpriteNode(imageNamed: "title")
    let highscoreText = SKLabelNode(fontNamed: "Chalkduster")

    override func didMoveToView(view: SKView) {
        self.playButton.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame))
        self.title.position = CGPointMake(CGRectGetMaxX(self.frame) - 150
            , CGRectGetMaxY(self.frame) - 150)
        self.highscoreText.text = "Highscore: \(highscore)"
        self.highscoreText.fontSize = 42
        self.highscoreText.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame) - 150)
        self.addChild(self.playButton)
        self.addChild(self.title)
        self.addChild(self.highscoreText)
        self.backgroundColor = UIColor(hex: 0x80D9FF)
    }

    override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
        for touch: AnyObject in touches {
            let location = touch.locationInNode(self)
            if self.nodeAtPoint(location) == self.playButton {
                var scene = PlayScene(size: self.size)
                let skView = self.view as SKView
                skView.ignoresSiblingOrder = true
                scene.scaleMode = .ResizeFill
                scene.size = skView.bounds.size
                skView.presentScene(scene)
            }
        }
    }

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

这是另一个类中创建和存储高分变量的函数:

func died() {

    var defaults = NSUserDefaults()

    var highscore = defaults.integerForKey("highscore")

    if (score > highscore){

        defaults.setInteger(score, forKey: "highscore")

    }

    var highscoreshow = defaults.integerForKey("highscore")

    if let scene = GameScene.unarchiveFromFile("GameScene") as? GameScene {
        let skView = self.view as SKView
        skView.ignoresSiblingOrder = true
        scene.size = skView.bounds.size
        scene.scaleMode = .AspectFill
        skView.presentScene(scene)
    }
}

【问题讨论】:

  • 确实 highscore 是一个 unresolved 标识符。它不能神奇地找出你想使用哪个highscore
  • 不,我的意思是我已经在另一个班级解决了。那么我该如何访问它@BryanChen
  • 请去掉不相关的方法,并添加更多关于其他类的信息,以便我们更容易理解问题。
  • 好吧,我做到了。你现在能帮我吗@jtbandes

标签: swift sprite-kit


【解决方案1】:

好的,有2个问题。

  1. 当您尝试访问变量 highscoreshow 时,它可能不存在。
  2. 变量 highscoreshow 只能在 PlayScene.died 方法(声明它的地方)中访问。

您可以使用 NSUserDefaults 在 2 个场景之间共享值 highscoreshow

  1. 只需在didMoveToView方法顶部的GameScene中添加这一行即可

    var highscoreshow = NSUserDefaults().integerForKey("highscore")

  2. 如果更改高分,请记住更新 NSUserDefaults 中的值

    NSUserDefaults().setInteger(highscoreshow, forKey: "highscore")

  3. 最后请注意,值 NSUserDefaults 保存在持久存储中。因此,如果您重新启动应用或设备,这些值仍然可用。

希望这会有所帮助。

【讨论】:

  • 非常感谢@appzYourLife
猜你喜欢
  • 2015-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-18
相关资源
最近更新 更多