Моя типичная раскладка для игр с несколькими уровнями, картами, интерактивными игровыми меню:
MainMenuVC SelectLevelVC, SelectMapVC и т. Д.
GameVC (Hud, Score, внутриигровые меню),DefenseVC (например, оверлей, выберите оружие)
EndWaveVC, EndGameVC
GameControl () - таймеры, итерации массива, проверка волны завершена, nextWave, очистка и т. Д.
данные- общий экземпляр (массивы, переключатели) для данных, совместно используемых виртуальными машинами и игровыми объектами
BaseObjects, такими как (защита, взрывы, звуки, движение, таргетинг)
GameNodes (создание и хранение всех узлов,загрузка модели, загрузка частиц, камера, освещение)
Я приземлился здесь, хотя много итераций.Есть некоторые компромиссы, но, отделяя ВК от данных и наборов сценариев, вещи могут оставаться довольно чистыми.Он также расширяет возможности выполнения потоков и таймеров только в нескольких местах, когда это необходимо.
sharedInstance of Data позволяет игровым объектам перебирать массивы для поиска целей и объектов, таких как защита, пытающаяся найти врагаи наоборот.Когда игровые объекты должны начать разговаривать друг с другом, обычно игровой дизайн начинает сходить с пути.Итак, я перебираю циклы через таймеры в GameControl, обмениваясь данными, и это делает их довольно чистыми.Так как я делаю петли в одном месте, я могу избежать растоптывания других объектов во время их обновления, а также получить некоторые точные измерения времени и контроля FPS.
Надеюсь, что это поможет.