如何从另一个场景调用函数?

How do I call a function from another scene?

我的游戏每次通关都会解锁一个关卡。所以我遇到的问题是当用户击败一级时,我希望它在我的 GameScene 中显示一个二级按钮。当我在我的 Level1.swift 文件中调用函数 unlockLevelTwo() 时,它没有出现在我的 GameScene.swift 文件中。我做错了什么?

//GameScene.Swift

func unlockLevelTwo() {

    let fadeIn = SKAction.fadeInWithDuration(0.5)

    levelTwo.position = CGPointMake(self.size.width / 2.0, self.size.height / 2.2)
    levelTwo.zPosition = 20
    levelTwo.setScale(0.8)
    levelTwo.alpha = 0
    levelTwo.runAction(fadeIn)
    levelTwo.name = "leveltwo"
    addChild(levelTwo)
}


//Level1.swift

    if firstBody.categoryBitMask == HeroCategory && sixthBody.categoryBitMask == GoldKeyCategory{

       //calling this function from my gameScene to unlock levelTwo button.

        var gameScene = GameScene()
        gameScene.unlockLevelTwo()

    }

这个函数:

if firstBody.categoryBitMask == HeroCategory && sixthBody.categoryBitMask == GoldKeyCategory{

       //calling this function from my gameScene to unlock levelTwo button.

        var gameScene = GameScene()
        gameScene.unlockLevelTwo()

    }

正在创建一个新的 GameScene 对象并将子节点 "levelTwo" 添加到该游戏场景。相反,您需要在当前呈现给用户的实际 GameScene 上调用 unlockLevelTwo()

我想在 Level1.Swift 的某处有一个对当前 GameScene 的引用(用户正在与之交互的那个)?调用那个函数。

编辑:

本质上,您必须做的是在代码中的某处保留对原始 GameScene 对象的引用,此后我将其称为 MyScene。这样,当在 Level1.swift 中时,您可以引用 MyScene 并添加按钮、级别等您喜欢的任何内容,而无需像您在此处所做的那样创建新的:

var gameScene = GameScene() gameScene.unlockLevelTwo()

相反,您只需调用

MyScene.unlockLevelTwo().

如果 Level1 是某种视图,或者是创建的对象,在 init 函数中,您可以传入 GameScene 对象并像这样设置它

class Level1 : (Type) {
    var myScene: GameScene!

    init(myScene: GameScene) {
        self.myScene = myScene)
    }
}

大概就是这样,希望对你有帮助!