【问题标题】:Proper scenekit architecture for multi level/screen games适合多级/屏幕游戏的场景套件架构
【发布时间】:2020-01-25 22:49:54
【问题描述】:

我是 Scenekit 的新手,所以当我开始我的第一个项目时,我注意到它与 spritekit 略有不同。虽然不理想,但我曾经在 spritekit 中使用 1 个游戏视图控制器和 1 个游戏场景来编写我的整个游戏。 (是的,这包括菜单、游戏/关卡、设置等……)

我现在想知道,因为我使用的是 SCNScenes(刚刚从视图控制器加载),我不希望我的 1 个视图控制器被代码淹没。布局游戏的最佳方式是什么?每个 SCNScene 我应该有 1 个视图控制器吗? (切换到不同的视图控制器:主菜单、游戏级别 1、游戏级别 2、游戏级别 3、游戏结束、设置等。)

这可能措辞不完美,但我感谢您的帮助!

艾丹

【问题讨论】:

    标签: ios swift architecture scenekit


    【解决方案1】:

    我对具有多个级别、地图、交互式游戏菜单的游戏的典型布局:

    MainMenuVC SelectLevelVC、SelectMapVC等

    GameVC(Hud、分数、游戏内菜单)、DefenseVC(如叠加层,选择武器)

    EndWaveVC、EndGameVC

    GameControl() - 定时器、数组迭代、检查波完成、nextWave、清理等

    数据 - 在 VC 和游戏对象之间共享数据的共享实例(数组、开关)

    BaseObjects,例如(防御、爆炸、声音、移动、瞄准)

    GameNodes(所有节点创建和存储、模型加载、粒子加载、相机、灯光)

    经过多次迭代,我来到了这里。有一些权衡,但通过将 VC 与数据和场景包分开,事情可以保持相当干净。它还增强了在需要时仅在少数几个地方执行线程和计时器的能力。

    Data 的 sharedInstance 允许游戏对象遍历数组以查找目标和对象,例如试图找到敌人的防御方,反之亦然。当游戏对象需要开始相互交谈时,这通常是游戏设计开始偏离轨道的地方。所以,我通过 GameControl 中的计时器来迭代循环,共享数据,这样可以保持它非常干净。由于我在一个地方进行循环,因此我可以避免在其他对象更新时践踏它们,并且还可以获得一些清晰的计时测量和控制 FPS。

    希望对您有所帮助。

    【讨论】:

    • 您是否使用单个 GameViewController 来显示所有关卡/地图(无论选择哪一个)?
    • 是的 - 我想这取决于游戏的类型,但我有超过 100 张地图的游戏,并且我使用了一个控制器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-11
    • 1970-01-01
    相关资源
    最近更新 更多