如何从另一个场景调用函数?
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)
}
}
大概就是这样,希望对你有帮助!
我的游戏每次通关都会解锁一个关卡。所以我遇到的问题是当用户击败一级时,我希望它在我的 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)
}
}
大概就是这样,希望对你有帮助!