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

标签 swift skscene

每次他们通过一个关卡,我的游戏就会解锁一个关卡。所以我遇到的问题是,当用户击败第一级时,我希望它在我的游戏场景中显示第二级按钮。当我在 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对象并将childNode“levelTwo”添加到该游戏场景。相反,您需要在当前呈现给用户的实际 GameScene 上调用 unlockLevelTwo()

我想象在 Level1.Swift 中的某个地方有对当前 GameScene 的引用(用户正在与之交互的游戏场景)?调用该函数。

编辑:

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

var gameScene = GameScene() gameScene.unlockLevelTwo()

相反,您只需调用

MyScene.unlockLevelTwo()

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

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

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

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

关于swift - 如何从另一个场景调用函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30535989/

相关文章:

swift - 以编程方式移动到下一个 View Controller

swift - 将文本大小设置为与最近通话联系人姓名相同的大小

ios - 如何更改 SKscene 大小

ios - 如何在 Skscene 中呈现 UIAlert

ios - 在 iOS App 中显示播放列表文件夹

ios - Swift - 使用创建的 plist

iOS 9 : Using AVPlayerViewController Swift.(划掉播放按钮)

ios - SpriteKit : static background in the scene with moving SKCameraNode

swift - 没有从 GameViewController 菜单移动到 GameScene Swift

swift - 使用 .sks 文件 Xcode 8 初始化 SKSpriteNode 的子类