我游戏中的场景:
主菜单 - >游戏设置菜单 - >核心游戏场景 - >游戏菜单(加载/保存/退出) - >核心游戏场景 - >游戏菜单(这里的东西停止工作)。
每个细分都是它自己的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)
}
还需要其他什么吗?对不起代码乱七八糟,但编辑这里的代码是神经崩溃...