重新打开spritekit场景

时间:2016-02-29 18:52:39

标签: macos sprite-kit skscene

我游戏中的场景:

主菜单 - >游戏设置菜单 - >核心游戏场景 - >游戏菜单(加载/保存/退出) - >核心游戏场景 - >游戏菜单(这里的东西停止工作)。

每个细分都是它自己的SKScene,并从一个到另一个呈现。游戏数据存储在可以从所有类访问的静态类中。 当我第一次开始游戏并进入核心游戏场景时,一切都很好。我可以打开游戏菜单并再次关闭它(返回核心游戏场景)。但是,当我希望再次打开游戏菜单场景时,它不会触发didMoveToView功能,也没有任何反应。 我已经使用相同的原理在场景之间进行了所有过渡,并且从主菜单场景到游戏设置和正常工作,我可以多次执行。即使尝试过没有过渡,但有些东西在这里运作不好......似乎我在这里找不到解决方案:(

AppDelegate非常紧张:

if let scene = MainMenu(fileNamed:"MainMenu")
{
    scene.size = CGSize(width: 1024, height: 768)
    scene.scaleMode = .AspectFit
    scene.backgroundColor = NSColor.blackColor()
    let transition = SKTransition.fadeWithDuration(1.5)
    self.skView!.presentScene(scene, transition: transition)
    self.skView!.ignoresSiblingOrder = true

    self.skView!.showsFPS = true
    self.skView!.showsNodeCount = true

    window.acceptsMouseMovedEvents = true
}

在MainMenu类实例化QuickGame类/场景中玩家设置游戏:

if let quickGameScene = QuickGame(fileNamed: "QuickGame")
{
    quickGameScene.scaleMode = self.scaleMode
    quickGameScene.backgroundColor = NSColor.blackColor()
    let transition = SKTransition.fadeWithDuration(1.5)
    view?.presentScene(quickGameScene, transition: transition)
}

在QuickGame实例化CoreGame类中核心游戏逻辑被“处理”:

gameData = GameData()
player.race = selectedRace
GameData.player = player;
GameData.background = SKSpriteNode(imageNamed: "bground")
GameData.background.anchorPoint = CGPoint.zero
GameData.background.position = CGPoint.zero
GameData.background.zPosition = 0

if let coreGame = CoreGame(fileNamed: "QuickGame")
{
    coreGame.scaleMode = self.scaleMode
    coreGame.backgroundColor = NSColor.blackColor()
    let transition = SKTransition.fadeWithDuration(1.5)
    view?.presentScene(coreGame, transition: transition)
}

这里注意GameData类,它本质上是保存静态属性的类,可以从一个场景转移到另一个场景。这里的想法是,当玩家进入maingamemenu时,核心游戏场景暂停但不会被破坏,直到玩家开始新游戏或退出游戏。如果主游戏菜单关闭,核心游戏应该从早期状态恢复!

这是GameData:

class GameData
{ 
static var player = Player() 
static var background = SKSpriteNode() 
static var alreadyInitialized = false
static var mainGameMenuCreated = false
}

MainGameMenu在CoreGame类中实例化:

MainGameMenu在CoreGame类中实例化:

if let mainGameMenu = MainGameMenu(fileNamed: "MainGameMenu")
{
    mainGameMenu.scaleMode = self.scaleMode
    mainGameMenu.backgroundColor = NSColor.blackColor()
    let transition = SKTransition.fadeWithDuration(1.5)
    view?.presentScene(mainGameMenu, transition: transition)
}

将CoreGAme实例化回MainGameMenu:

if let coreGame = CoreGame(fileNamed: "CoreGame") 
{ 
    coreGame.scaleMode = self.scaleMode 
    coreGame.backgroundColor = NSColor.blackColor() 
    let transition = SKTransition.fadeWithDuration(1.5)
    view?.presentScene(coreGame, transition: transition) 
}

还需要其他什么吗?对不起代码乱七八糟,但编辑这里的代码是神经崩溃...

0 个答案:

没有答案