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

Swift:在不同场景中更新变量,swift,sprite-kit,var,scene,Swift,Sprite Kit,Var,Scene,我的游戏场景中有一个变量,它是score变量,它用SKLabelNode显示在屏幕上 每次发生冲突时,都会将1添加到score,并将其作为字符串传输到SKLabelNode,然后在屏幕上更新 问题是,当我从GameOverScene(最终分数与“game over”(游戏结束)一起显示的场景)调用它时,我得到分数的第一个值,即0。像GameOverScene一样,正在读取变量,但不是更新的变量。 如何获取更新的变量?有人能帮忙吗 代码: class GameScene: SKScene, SKP

我的游戏场景中有一个变量,它是score变量,它用SKLabelNode显示在屏幕上

每次发生冲突时,都会将1添加到score,并将其作为字符串传输到SKLabelNode,然后在屏幕上更新

问题是,当我从GameOverScene(最终分数与“game over”(游戏结束)一起显示的场景)调用它时,我得到分数的第一个值,即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
发生碰撞时,得分为get的+1

func bulletDidCollideWithEnemy(enemy: SKSpriteNode, bullet: SKSpriteNode) {

        score++
        scoreText = String(score)
        scoreOnScreen.text = scoreText
然后,游戏场景:

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)

    }
class GameOverScene: SKScene {

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

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

我是在一个昵称为贾萨默的reddit人的帮助下想出这个主意的。盖伊摇滚

以下是我所改变的:

当场景被改变时

let scene = GameOverScene(size: skView.bounds.size)
我补充说:

    scene.gameScene = self
    scene.score = score
然后,游戏场景:

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)

    }
class GameOverScene: SKScene {

    var gameScene = GameScene()
override func didMoveToView(view: SKView) {
   gameOverLabel.text = "score: \(gameScene.score)"
它是有效的

我认为主要的问题是没有设置
scene.GameScene=self

我希望有一天这能帮助别人