我正在使用Swift开发SceneKit游戏,我正在考虑组织围绕实际主游戏场景的各种屏幕/状态的最佳方式。我有一个简单的原型,包含三种状态:
在原型中,我选择去UIKit做UI元素,而不是SpriteKit叠加。虽然现在只是按钮,这在SpriteKit中很容易做到,但我可能在将来想要添加滑块(例如选项屏幕来设置控制灵敏度等),文本输入等,然后你最终重新创建大块uikit。
所以目前,上述3个场景中的每一个都有自己的UIViewController
。 Splash和Game ViewControllers有自己的SCNView
和SCNScene
s,而GameOver是一个显示在主游戏场景上的模态。
这种结构并不是很理想,因为这意味着只要viewDidLoad
的{{1}}触发,主游戏SCNScene就会重新加载。主GameViewController
非常详细,因此加载需要几秒钟,并且重复循环这似乎会产生内存问题。经过2个周期的Splash - >游戏 - > GameOver我得到一个内存警告,在第三个周期后Xcode失去了与iPhone的连接(根据我的经验,这似乎是由内存问题引起的)。
我希望有一个主SCNScene
一次加载最常用的资源,但仍能在各种菜单屏幕之间进行切换。
那么这里有什么选择?
我想也许我可以有一个主GameViewController
来控制SceneKit资产的加载和卸载,并且只有GameViewController
。当应用程序首次启动时,它的SCNView
方法只会被触发一次。然后,每个其他视图都会有一个非常小的viewDidLoad
,它将在主GameViewController上显示为模态,并选择“OverCurrentContext”。
我想问一下这种模式是否可行,以及其他人如何组织他们的SceneKit游戏。我对原生iOS开发还很陌生,所以我可能会缺少一些基本的游戏设计模式。
答案 0 :(得分:1)
我只使用一个GameViewController的经验(我目前的MAC OS X工作:我开始了一个带有MainMenu /开始屏幕的小型3D游戏,一个Hud和2个或3个完全不同的3D场景 - 这应该是然后移植到IOS):
在上周,我尝试了你所要求的,只使用一个GameViewController来“全部”那些东西 - 对我来说这似乎是简单而“好”的方式 - 但即使经过很多时间我在去年学到的所有技巧在单个ViewController中加载一个场景包场景后,我无法重新加载另一个(或改变)3D场景(甚至不是另一个精灵套件场景hud)。 也许MAC OS X和IOS之间存在差异,但我甚至尝试在iOS版本中使用它并且它具有相同的行为。
我能做什么:您可以修改加载的3D场景或更改精灵套件中的数据等,这样您就可以使用一个3D场景在需要时添加或显示内容但是就我的测试显示,你需要一个ViewController来显示一个全新的不同的3D场景或2d / 3d Menus等。一旦我更进一步,我将发布我的进一步经验。我希望这有点帮助。