SceneKit游戏架构,ViewController之间的通信

时间:2018-08-31 11:20:59

标签: swift scenekit

我正在用SceneKit控制的三个VC构建NavigationController游戏。

尝试找出存储球员详细信息(设置和得分)的最佳方法。每个VC都应该更新玩家的详细信息。

我已经通过单独的Model类实现了MVC方法,以检索游戏数据。

有:

  1. MainViewController,具有字符选择功能,并链接到其他两个屏幕(+链接到帮助屏幕)

  2. GameViewController,带有SceneKit View和Scene和SpriteKit HUD覆盖。

  3. SettingsViewController以及球员成绩和设置。

我正在考虑实现Player类,以保存每个VC应该可以访问的所有玩家详细信息。

当VC使用segue进行转换时,我应该通过委托将更新的信息传递给玩家还是更新目标VC。

这里有部分答案: How to build a multilevel game in SceneKit

但是我不确定这是否仍然是最好的方法。


对此进行了更多研究,并找到了可能对他人有用的潜在解决方案。

这基于用于在视图控制器之间传播状态的依赖注入。

以下两篇文章对此进行了很好的描述

Matteo Manferdini: https://code.tutsplus.com/tutorials/the-right-way-to-share-state-between-swift-view-controllers--cms-28474

和Andy Obusek: http://cleanswifter.com/dependency-injection-with-storyboards/

1 个答案:

答案 0 :(得分:0)

我还没有看到任何关于此的文章...希望对您有帮助。

我使用数据类(sharedInstance)并将全局变量存储在那里。我使用委托在视图控制器之间进行通信。通常,我只是在代表中传递游戏状态或菜单选项。

很大程度上取决于复杂性,当然,我尽可能地纯洁,但是在一个真实的游戏(不是示例代码)中,事情可能变得很繁琐。您经常要处理许多需要互相交谈的对象,例如您的玩家可能需要与玩家和其他对象交谈。循环,线程问题,声音引擎,游戏状态-发生了很多事情,没有sharedInstance很难做到。

如果您能够获得完美的设计,那真是太好了-做到这一点的人一定很满意,但是我尝试获得80%的设计,并使用全局变量解决一次性问题。