在 Sprite Kit 游戏中重置 SKScene

Posted

技术标签:

【中文标题】在 Sprite Kit 游戏中重置 SKScene【英文标题】:Reset SKScene in Sprite Kit Game 【发布时间】:2017-09-12 14:20:54 【问题描述】:

我正在开发一款游戏。

我的第一个屏幕包括 3 个按钮:排行榜、成就和游戏。

当我点击播放时,会显示游戏场景。

let transition = SKTransition.doorsOpenHorizontal(withDuration: 1.0)
let next_scene = GameScene(fileNamed: "GameScene")
next_scene?.scaleMode = scaleMode
view?.presentScene(next_scene!, transition: transition)

当用户死亡时,我想重置游戏场景,包括擦除所有内容并再次调用 didMove 函数。我想删除游戏场景并重新创建它。

我该怎么做?

我试过了

self.view?.presentScene(nil)
let transition = SKTransition.doorsOpenHorizontal(withDuration: 1.0)
let next_scene = MainMenu(size: self.size)
next_scene.scaleMode = scaleMode
self.view?.presentScene(next_scene, transition: transition)

但是用 0 个节点使场景变为空白。

【问题讨论】:

你试过关注这个answer 尝试了该解决方案,但问题是它不会重置我的场景。它淡出它,当它淡入时,它会继续场景。它不是从头开始,而是从上次开始的地方开始,包括游戏结束菜单等。 根据你所说的这个答案(我)应该有效:***.com/a/40052923/6728196。另外,如果您说要重新启动 GameScene,为什么要显示 MainMenu? 试过了,但没有成功。 '尝试添加一个已经有父节点的 SKNode: name:'(null)' texture:[ 'moon' 并且它发生在所有其他节点上。问题是当我重新启动场景时,它不会删除我的节点。它会擦除除 2 个节点之外的所有内容。 您使用的是 sks 文件吗?你可能想做let next_scene = MenuScene(fileNamed: "MenuScene") 【参考方案1】:

尝试这样做:`

  let gameSceneTemp = sceneName(fileNamed: "fileName")
                gameSceneTemp?.scaleMode = self.scaleMode
                self.scene?.view?.presentScene(gameSceneTemp!, transition: SKTransition.doorsCloseHorizontal(withDuration: 0.0))`

我有时也会创建不在 SKScenes 文件中的对象,如果您使用 addChild,应该不会有任何问题。

【讨论】:

以上是关于在 Sprite Kit 游戏中重置 SKScene的主要内容,如果未能解决你的问题,请参考以下文章

如果 Sprite Kit 中有墙,我怎样才能停止一个人的行走?

使用 Sprite Kit 和 Swift 在游戏中显示当前分数

使用 Swift 在 Sprite Kit 中构建棋盘游戏? [关闭]

游戏中的三角学——Sprite Kit 和 Swift 教程

游戏中的三角学——Sprite Kit 和 Swift 教程

iOS 如何在 Sprite Kit 游戏中创建音频淡入/淡出效果?