每次他们通过一个关卡,我的游戏就会解锁一个关卡。所以我遇到的问题是,当用户击败第一级时,我希望它在我的游戏场景中显示第二级按钮。当我在 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/