![]() |
|
||||||||||
|
|||||
|
Регистрация: Jan 2010
Сообщений: 147
|
привет, подскажите, как можно обеспечить наилучшим образом смену уровней в игре. пробую написать простенькую игру на базе MVC и никак не могу всунуть туда переход по уровням. кто должен за это отвечать?
|
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Контроллер.
|
|
|||||
|
Регистрация: Jan 2010
Сообщений: 147
|
ок. контроллер. пускай есть 15 уровней. каждый уровень - это вьюшка отдельная, которая грузится по листнеру в контроллере? или это одна вьюшка, в которую подгружается data или VO? или надо делать 15 мувиклипов и в зависимости от номера уровня грузить тот или иной? мне нравится вариант, когда у меня одна вьюшка - GameLevelsView, в которую подгружается data с инфой об уровне и в зависимости от нее создаются новые и удаляются старые мувики. Как все таки лучше? может есть удачные примеры левел провайдеров?
|
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Вьюшка одна.
|
|
|||||
|
Регистрация: Jan 2010
Сообщений: 147
|
мне вполне нравится вариант с одной вьюшкой. перейду к коду. предположим мы нажали кнопку Play, удалилось менюшка и задиспатчился кастомный ивент о начале нового уровня, который я слушаю в контроллере:
обрабатываю его так: private function onProcessNextLevel(e : GameEvent) : void { view.createGameLevel(model.currentLevel); model.increaseCurrentLevel(); } И вот, что мне не нравится, так это то, что во вьюшке мне приходится делать так: и если у меня уровней двадцать, то что мне, лупить столько кейсов? а ведь еще логика вьюшки, а мне ведь еще надо чистить левел перед созданием нового. я уверен, что как-то это можно сделать грамотно, без нагромождения кода. подскажите, пожалуйста, у кого больше опыта, как именно это организовать |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Абстрактный класс AGameLevel, интерфейс IGameLevel, классы-наследники GameLevel001 ... GameLevel100.
Эти классы (классы, не экземпляры) складываем в массив _gameLevels. При повышении уровня создаем новый уровень - Не нужна будет конкретика в названиях методов, квадратики там или пирамидки, определяется классом-наследником, то есть собственно левелом. Абстрактно это "фигура1" и "фигура2", операции с которыми и доступ к ним могут быть описаны еще в суперклассе и интерфейсе, а конкретное рисование - в методах подклассов (левелов).
__________________
Reality.getBounds(this); |
|
|||||
|
Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
|
Практика показывает, что хорошо бы сразу предусмотреть метод remove для класса-левела. И при создании нового уровня честно чистить старый (удалять листенеры, останавливать звуки и т.д.) перед удалением.
Что-то типа: val iGameLevel:IGameLevel; private function openLevel(levelIndex) : void { if (iGameLevel) { iGameLevel.remove(); } iGameLevel = new _gameLevels[levelIndex]; } Впрочем, возможно, это только у меня такая необходимость. ![]() |
|
|||||
|
Регистрация: Jan 2010
Сообщений: 147
|
Wolsh, где хранится массив _gameLevels?
mikhailk, согласен. |
|
|||||
|
Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
|
_gameLevels - это переменная класса основного контейнера, в котором будут открываться уровни.
С другой стороны, очень от игры зависит. Если каждый левел весит по 2-3 метра, их никто заранее не закачивает, в этом случае и массив объектов GameLevel, возможно, смысла большого не имеет. |
![]() |
![]() |
Часовой пояс GMT +4, время: 19:58. |
|
|
« Предыдущая тема | Следующая тема » |
|
|