Swift:使用 StoryBoards 和 UIViewControllers 在 GameScene 中满足条件后返回主菜单?

Posted

技术标签:

【中文标题】Swift:使用 StoryBoards 和 UIViewControllers 在 GameScene 中满足条件后返回主菜单?【英文标题】:Swift: returning to Main Menu after condition is met in GameScene using StoryBoards and UIViewControllers? 【发布时间】:2017-01-22 11:04:11 【问题描述】:

上下文

此问题与Swift: SKSpriteKit, using Storyboards, UIViewController and UIButton to set in game parameters? 相关,使用相同的 M.W.E. (下面的链接)。

看看Main.storyboard,我们看到以下内容:

虽然这个故事板允许人们通过点击从左到右前进:

玩->(简单/困难)-> GameScene

UIViewController -> MyUIViewController -> GameViewController

从右到左单击最后一个UIViewController 上的UIButtonUILabel 表示“分数”,没有办法从GameViewController 到最后一个UIViewController 与“得分”UILabel

问题

鉴于GameScene 期间发生的某个事件,我如何从GameScene 传递一些信息(例如分数)并转换到最后一个UIViewController,以便用户可以重新开始游戏。除了删除GameViewController 中的所有内容之外,不仅会导致无法访问GameScene 的旧实例。

对于特定条件,让我们点击 M.W.E. 中的紫色精灵。对于信息,让它成为一些微不足道的东西,比如按下精灵之前的时间,或者甚至只是一个随机数。

最小工作示例

Stack Overflow SKSpriteKit

注意

我的回答 here - 并在此处实现*** SKSpriteKit with Menu - 表明这显然是可能的,但是通过将所有内容归入SKViews 而不是使用storyboard。因此,如果可能,请保留与使用这种混合 storyboard-SKView 方法以及如何让 GameScene 调用“分数”-UIViewController 相关的答案。

【问题讨论】:

您熟悉委托模式吗?这是子视图与父视图通信的常用方式。这个SO Post 展示了基本思想并执行了展开序列。委托协议可以扩展为包含一个 score 属性,因此当值发生变化时,场景可以通知​​它的 ViewController。 @MarkBrownsword 不。我不是,你能用这个 M.W.E. 解释一下吗:github.com/SumNeuron/***-SKSpriteKit-with-Menu 【参考方案1】:

您可以使用下一个场景的 userData 实例属性来存储当前场景,例如:

nextScene.userData = NSMutableDictionary()
nextScene.userData?.setObject(actualScore, forKey: "actualScore" as NSCopying)

当你在下一个场景中时,你可以向这个 NSMutableDictionary 询问上一个场景是谁:

if let actualScore = self.userData?.value(forKey: "actualScore") 
    print("well done!, the score was: \(actualScore)")

【讨论】:

以上是关于Swift:使用 StoryBoards 和 UIViewControllers 在 GameScene 中满足条件后返回主菜单?的主要内容,如果未能解决你的问题,请参考以下文章

Storyboards + UIcollectionView:UI 在 iOS 模拟器和设备上的显示方式不同

如何在没有 Storyboards/Unwindng Segues 的情况下在 Swift 中使用 UIViewControllerAnimatedTransitioning?

Xcode OS X Storyboards:如何获得对***“窗口内容”视图控制器的引用?

无法让状态恢复与编程导航控制器一起使用

将 AcceptMouseMovedEvents 用于带有 Storyboard 和 Swift 的 SpriteKit 鼠标操作

Swift - 无法向 UITableView 添加数据