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

时间:2015-05-29 17:49:08

标签: swift skscene

我的游戏每次击败关卡时都会解锁一个关卡。因此我遇到的问题是,当用户击败第一级时,我希望它在我的GameScene中显示2级的按钮。当我在我的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()

    }

1 个答案:

答案 0 :(得分:1)

此功能:

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

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

        var gameScene = GameScene()
        gameScene.unlockLevelTwo()

    }

正在创建一个新的GameScene对象,并将childNode“levelTwo”添加到该gamescene。相反,您需要在当前提供给用户的实际unlockLevelTwo()上调用GameScene

我想象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)
    }
}

这样的事情,希望它有所帮助!