Правильная архитектура сцены для многоуровневых / экранных игр - PullRequest
0 голосов
/ 25 сентября 2019

Я новичок в scenekit, поэтому, когда я начал свой первый проект, я заметил, что он немного отличается от spritekit.Хотя это и не идеально, я использовал 1 gameviewcontroller и 1 gamescene в spritekit для кодирования всей моей игры.(ДА, это включает в себя меню, игру / уровни, настройки и т.д ...)

Мне сейчас интересно, так как я использую SCNScenes (которые только что загружены из viewcontroller), я не хочумой 1 контроллер просмотра должен быть завален кодом.Каков наилучший способ макета игры?Должен ли я иметь 1 viewcontroller на SCNScene?(переключение на другой контроллер вида для: главного меню, игрового уровня 1, игрового уровня 2, игрового уровня 3, игры окончен, настроек и т. д.)

Возможно, это не было сформулировано идеально, но я ценюпомощь!

Эйдан

1 Ответ

0 голосов
/ 27 сентября 2019

Моя типичная раскладка для игр с несколькими уровнями, картами, интерактивными игровыми меню:

MainMenuVC SelectLevelVC, SelectMapVC и т. Д.

GameVC (Hud, Score, внутриигровые меню),DefenseVC (например, оверлей, выберите оружие)

EndWaveVC, EndGameVC

GameControl () - таймеры, итерации массива, проверка волны завершена, nextWave, очистка и т. Д.

данные- общий экземпляр (массивы, переключатели) для данных, совместно используемых виртуальными машинами и игровыми объектами

BaseObjects, такими как (защита, взрывы, звуки, движение, таргетинг)

GameNodes (создание и хранение всех узлов,загрузка модели, загрузка частиц, камера, освещение)

Я приземлился здесь, хотя много итераций.Есть некоторые компромиссы, но, отделяя ВК от данных и наборов сценариев, вещи могут оставаться довольно чистыми.Он также расширяет возможности выполнения потоков и таймеров только в нескольких местах, когда это необходимо.

sharedInstance of Data позволяет игровым объектам перебирать массивы для поиска целей и объектов, таких как защита, пытающаяся найти врагаи наоборот.Когда игровые объекты должны начать разговаривать друг с другом, обычно игровой дизайн начинает сходить с пути.Итак, я перебираю циклы через таймеры в GameControl, обмениваясь данными, и это делает их довольно чистыми.Так как я делаю петли в одном месте, я могу избежать растоптывания других объектов во время их обновления, а также получить некоторые точные измерения времени и контроля FPS.

Надеюсь, что это поможет.

...