SceneKit游戏的架构,菜单屏幕的多视图控制器



我正在使用Swift开发SceneKit游戏,我正在考虑如何组织实际主游戏场景周围的各种屏幕/状态。我有一个简单的原型,它由三个状态组成:

  • 飞溅屏幕(选择游戏类型)->
  • 游戏->
  • 在屏幕上玩游戏(选择再次玩或返回飞溅)

在原型中,我选择使用UIKit来处理UI元素,而不是使用SpriteKit覆盖。虽然目前只是按钮,这在SpriteKit中很容易做到,但我将来可能想添加滑块(例如设置控制灵敏度的选项屏幕等)、文本输入等,然后你就可以重新创建大量的uikit了。

因此,目前,上述3个场景中的每一个都有自己的UIViewController。Splash和Game ViewControllers有自己的SCNViewSCNScene,GameOver是显示在主游戏场景上的模式。

这种结构并不理想,因为这意味着每当GameViewControllerviewDidLoad启动时,主游戏SCNScene就会被重新加载。主SCNScene非常详细,因此需要几秒钟的时间才能加载,而且重复的循环似乎会产生内存问题。在Splash->Game->GameOver的两个周期后,我收到了内存警告,在第三个周期后Xcode失去了与iPhone的连接(根据我的经验,这似乎是由内存问题引起的)。

我希望有一个主GameViewController,它可以一次性加载最频繁重用的资产,但仍然能够在各种菜单屏幕之间切换。

那么这里有什么选择呢?

我想也许我可以有一个主GameViewController,它控制SceneKit资产的加载和卸载,并拥有唯一的SCNView。它的viewDidLoad方法只会在应用程序首次启动时触发一次。然后,其他每个视图都将有一个非常小的UIViewController,它将在主GameViewController上显示为模态,并选择"OverCurrentContext"。

我想问一下这种模式听起来是否可行,以及其他人是如何组织他们的SceneKit游戏的。我对原生iOS开发还很陌生,所以可能我错过了一些基本的游戏设计模式。

我只使用一个GameViewController的经验(我目前在MAC OS X上的工作:我开始了一个"小"3D游戏,有一个主菜单/启动屏幕,一个Hud和2或3个完全不同的3D场景-这也应该移植到IOS):

上周我试过你的要求,只使用一个GameViewController来处理"所有"这些事情——对我来说,这似乎是一种简单而"好"的方法——但即使在使用了我过去几年学到的所有技巧很多小时之后,我也无法在一个ViewController中加载一个场景集场景后重新加载(或更改)另一个3D场景(甚至不能加载另一个精灵工具包场景hud)。也许MAC OS X和IOS之间有区别,但我甚至在IOS版本中尝试过,它有相同的行为。

我能做的是:你可以修改加载的3D场景或更改精灵工具包中的数据等,这样你就可以在需要的时候使用一个3D场景来添加或显示这些东西,但就我在这里的测试而言,你需要一个ViewController来显示一个全新的不同3D场景或2d/3D菜单等。我会在更进一步的时候发布我的进一步体验。我希望这能有所帮助。

最新更新