我的游戏每次击败关卡时都会解锁一个关卡。因此我遇到的问题是,当用户击败第一级时,我希望它在我的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()
}
答案 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)
}
}
这样的事情,希望它有所帮助!