Должен ли я немедленно инициализировать всех NPC-монстров и особенности ландшафта для каждого экрана
Вы можете, конечно, ничто не мешает вам сделать это:
Однако это зависит от того, насколько велики ваши уровни, а также от компромисса между временем загрузки и лагами во время игры (например, при загрузке следующего экрана).
Я бы предложил следующее:
Первый: темы
Создайте два потока, которые работают одновременно, один, отвечающий за фактический игровой процесс, и другой, чья единственная ответственность заключается в загрузке новой местности. Поток gameplay
является основным и запускает поток loader
для загрузки новых данных о местности, когда игрок переходит к следующему экрану.
Второе: уменьшение лагов между одной местностью и другой
Избегайте загрузки следующего ландшафта при входе в него . Вместо этого вам следует (для бокового скроллера) загрузить местность, расположенную слева направо, и область, расположенную справа от текущей позиции. Таким образом, вам не понадобится для одновременного сохранения всего уровня в памяти, и в то же время никогда не столкнется с задержкой при входе в соседнюю местность . Это работает довольно хорошо с первым пунктом.
Это также хорошо согласуется с вашим требованием, чтобы монстры-NPC на одной территории могли «следовать» за вами на следующую территорию (если вы их не убили); с оговоркой, что если игрок проходит через два экрана подряд без монстров NPC, проходящих через один, они не смогут следовать за вами дальше; это то, сколько боковых скроллеров, в которые я играл, все равно работают.
Также обратите внимание, что это означает, что когда вы начнете уровень, вам придется загружать 2 или 3 ландшафта одновременно (в зависимости от того, начинаете ли вы с края или в середине уровня), но впоследствии вы будете нужно загружать только одну местность за раз, потому что все, что вам нужно сделать, это поменять местами текущую и соседнюю каждый раз, когда игрок продвигается к следующей местности
Каков наилучший формат / способ хранения того, что входит в каждый экран?
Serialize
Учитывая, что выбранной вами платформой является Java, я бы сказал, что наиболее эффективный способ сохранения данных уровня - это сериализация. Создайте классы, в которых хранится информация об уровнях и объекте, в интерфейсе Serializable
.
Если вы выберете эту опцию, то при первом создании уровней вам придется либо создать специальные методы для жесткого кодирования инициализации каждого уровня, а затем сериализовать их перед загрузкой игры; или вам придется создать редактор уровней.
XML
Эта опция значительно увеличивает время загрузки по сравнению с десериализацией объектов, но она более надежна, и ее очень легко вносить изменения. Это, вероятно, лучший вариант, если ваши уровни не очень сложны.
На самом деле, ничто не мешает вам сделать комбинацию обоих.