Swift:在不同的场景中更新了变量

Posted

技术标签:

【中文标题】Swift:在不同的场景中更新了变量【英文标题】:Swift : Updated Variable in a different scene 【发布时间】:2015-01-07 02:48:03 【问题描述】:

我的 GameScene 中有一个变量,它是 score 变量,它通过 SKLabelNode 显示在屏幕上。

每次发生碰撞时,都会将分数加 1,并将其作为字符串传输到 SKLabelNode,然后在屏幕上更新。

问题是,当我从我的 GameOverScene(最终分数与“游戏结束”一起显示的场景)调用它时,我得到第一个分数值,即 0。就像 GameOverScene 正在读取变量,但不是更新了一个。 如何获取更新的变量?有人可以帮忙吗?

代码:

class GameScene: SKScene, SKPhysicsContactDelegate 
    // S C O R E !
    var score = 0
    var scoreText: String = ""

    var scoreOnScreen = SKLabelNode()
...

override func didMoveToView(view: SKView) 
    // S C O R E
    scoreOnScreen.position = CGPoint(x: size.width / 2, y: size.height * 0.8)
    scoreText = String(score)
    scoreOnScreen.text = scoreText

发生碰撞时,得分+1

func bulletDidCollideWithEnemy(enemy: SKSpriteNode, bullet: SKSpriteNode) 

        score++
        scoreText = String(score)
        scoreOnScreen.text = scoreText

然后是 GameOverScene:

import SpriteKit
import UIKit

class GameOverScene: SKScene 

    let GameSceneInstance = GameScene()
    let bgImage = SKSpriteNode(imageNamed: "background")
    let afraidLogo = SKSpriteNode(imageNamed: "gameoverlogo")
    var gameOverLabel = SKLabelNode()

    override func didMoveToView(view: SKView) 

        GameSceneInstance.scoreOnScreen.text = String(GameSceneInstance.score)

        bgImage.position = CGPoint(x: size.width / 2, y: size.height / 2)
        bgImage.setScale(0.75)
        addChild(bgImage)

        afraidLogo.position = CGPoint(x: size.width / 2, y: size.height / 2)
        afraidLogo.setScale(0.50)
        addChild(afraidLogo)

        gameOverLabel.fontSize = 40
        gameOverLabel.fontColor = SKColor.whiteColor()
        gameOverLabel.text = "score: \(GameSceneInstance.scoreOnScreen.text)"
        gameOverLabel.position = CGPointMake(self.size.width/2, 2.0 / 3.0 * self.size.height);
        addChild(gameOverLabel)

    

我敢打赌,这只是代码的一个简单问题。感谢任何帮助。

【问题讨论】:

【参考方案1】:

我在一个昵称 Jasamer 的 reddit 人的帮助下想通了。家伙摇滚。

这是我所做的更改:

当场景改变时

let scene = GameOverScene(size: skView.bounds.size)

我补充说:

    scene.gameScene = self
    scene.score = score

然后是 GameOverScene:

class GameOverScene: SKScene 

    var gameScene = GameScene()
override func didMoveToView(view: SKView) 
   gameOverLabel.text = "score: \(gameScene.score)"

它有效。

我认为主要问题不是设置scene.GameScene = self

我希望有一天这对某人有所帮助。

【讨论】:

以上是关于Swift:在不同的场景中更新了变量的主要内容,如果未能解决你的问题,请参考以下文章

Jmeter中的变量

Swift-使用完成处理程序更新闭包外的全局变量

Swift 在场景之间传递变量?

为啥 Swift 不更新闭包外的变量?

在没有 Segues 的故事板之间传递变量 - Swift

从 Swift Playground 中的不同页面访问变量