我在GameScene类中有这个函数
class GameScene: SKScene {
func runGameOver() {
self.removeAllActions()
self.enumerateChildNodes(withName: "Bullet") {
bullet, stop in
bullet.removeAllActions()
}
self.enumerateChildNodes(withName: "Enemy") {
enemy, stop in
enemy.removeAllActions()
}
}
}
我正在尝试从另一个类中的另一个函数运行runGameOver函数。每当敌人从livesNumber离开屏幕时,就会调用loseALife函数。
如果我为GameScene声明了变量/常量,就像在 让object = GameScene() 然后使用 object.runGameOver()调用该函数应用程序崩溃,因此,我正在调用它,如下所示 GameScene()。runGameOver()但它没有工作。我该如何访问该功能?
class LivesSystem {
func loseALife() {
livesNumber -= 1
if livesNumber == 0 {
GameScene().runGameOver()
}
}
}
答案 0 :(得分:1)
问题是你正在制作一个新假GameScene()
,这当然是错误的做法。为了能够与真实(当前呈现的那个)GameScene
进行互动,您可以使用NotificationCenter
,这样做:
1)在你的GameScene中,让我们观察一下游戏结束:
class GameScene: SKScene {
override func sceneDidLoad() {
super.sceneDidLoad()
NotificationCenter.default.addObserver(forName: Notification.Name.init("game_over"), object: nil, queue: OperationQueue.main) { [weak self] (notification) in
self?.runGameOver()
}
}
func runGameOver() {
self.removeAllActions()
self.enumerateChildNodes(withName: "Bullet") {
bullet, stop in
bullet.removeAllActions()
}
self.enumerateChildNodes(withName: "Enemy") {
enemy, stop in
enemy.removeAllActions()
}
}
}
2)在LivesSystem
需要的时候,通过以下方式启动通知:
class LivesSystem {
var livesNumber = 3
func loseALife() {
livesNumber -= 1
if livesNumber == 0 {
NotificationCenter.default.post(name: Notification.Name.init("game_over"), object: nil)
}
}
}