2012-03-19 4 views
1

В моей RPG-игре есть случайные битвы. Когда игрок входит в случайную битву, для моей игры необходимо загрузить текстуры, используемые в этой битве (анимированные монстры, анимации и т. Д.). Текстуры довольно много, и довольно большие (битвы очень графически интенсивны).Экран анимации при загрузке текстур

Такой процесс требует значительного времени. И пока он загружается, весь экран замерзает.

Карта игры замерзает, и время ожидания значимо - я лично нахожу это раздражающим.

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

  • Если я поджать все текстуры в начале игры, приложение, безусловно, крах.
  • Если я предварительно загружаю текстуры, которые используются на определенной карте, когда игрок входит в карту, приложение равно очень, возможно, также может произойти сбой.
  • Я могу только позволить загружать текстуры, когда они мне нужны, и избавиться от них, как только закончится битва.

Я предпочел бы не использовать «загрузочный экран» изображение, потому что это влияет на дизайн и концепцию моей игры. Я хочу избежать такого подхода.

Если бы я мог сделать какое-то анимацию в то время как загрузкой текстур, это было бы здорово, что приводит к моему вопросу: возможно ли это? Какую анимацию вы спрашиваете? Ну, а как насчет ... вы помните, когда Final Fantasy искажала экран, явно загружая текстуры? Что-то вроде того. Но хорошо, искажение - довольно трудоемкий процесс, так что, может быть, просто крутая анимация кадр за кадром или что-то в этом роде.

При написании этого я понял, что могу сделать небольшие паузы между текстурами (есть несколько текстур), и во время таких пауз я обновляю экран, чтобы представить состояние анимации. Однако этого маловероятно, потому что каждая текстура 2048x2048, поэтому анимация будет обновлена ​​с довольно лагги (и раздражающей) скоростью. Я бы предпочел избежать этого.

ответ

0

Поскольку битвы должны быть случайными, можно ли предварительно загрузить текстуры для следующего боя до того, как эта битва произойдет? Затем битва может начинаться всякий раз, когда загрузка завершена.

  1. Игра решает бой должен произойти в ближайшее время
  2. Генерации случайного столкновения (монстры/фон/и т.д.?)
  3. Загрузить текстуры для встречи
  4. Start встречи после того, как загрузили текстуры

Бои все еще случайны, это просто, что битва была определена немного раньше, чем пользователь осознает, что битва должна произойти.

+0

Но даже в этом случае мне нужно загрузить текстуры, необходимые для такой битвы. Если игра решит, что «скоро придет битва», ей придется начать загрузку текстур. Но если это произойдет, игра замерзнет и будет отставать. Хуже того, потому что игрок не знает, почему это происходит. – Voldemort

+0

@Omega: Вы не можете загружать текстуры в фоновый поток? – Coeffect

+0

Это то, о чем я не знал. Как это было бы? – Voldemort

0

Сначала вы можете загружать текстуры с низким разрешением, а в фоновом потоке (как мне кажется, NSOperation) начинают загружаться большие текстуры и «своп» их по завершении.

Что касается анимации, много игр начать загрузку небольших текстур, когда игрок находится далеко, и, поскольку они ближе, тем выше, разрешение текстур будет «исчезать» в

1

В подобной привязки, я выбрал

  1. Преобразование всех моих анимационных текстур в gzipped PVR. Время загрузки (в зависимости от устройства) улучшается в 2-4 раза. Любые артефакты, вызванные преобразованием в PVR, не заметны в движении.
  2. Я предварительно загружаю простоя анимации (почти всегда, кроме как во время использования умения или когда он причиняет вред). Я делаю это во время затухания сцены битвы. Я управляю самим замиранием на скорости тика 50 мс, а при каждый кадр i запускает предварительную загрузку одного из простоя (их максимум 8, они принимают около 20 мс).
  3. У меня есть класс «помолвки», который вычисляет весь бой раньше времени . Когда анимация становится снимите необходимо, я выгрузить его. Кроме того, во время «больно» анимации, я упреждающий следующий навык анимации.

нагрузок весело. Желаем удачи в вашей игре.

пс. Не верьте симулятору для фактического времени отклика. Быстро перейдите к устройствам, чтобы определить, действительно ли у вас проблема с производительностью.

pps. Пример 1, что привело к значительному уменьшению размера для моего приложения.