Анимировать экран при загрузке текстур - PullRequest
1 голос
/ 19 марта 2012

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

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

Карта игры зависает, и время ожидания значительно - лично меня это раздражает.

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

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

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

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

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

Ответы [ 3 ]

1 голос
/ 19 марта 2012

В аналогичной привязке я выбрал

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

куча веселья. Удачи в вашей игре.

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

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

0 голосов
/ 19 марта 2012

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

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

0 голосов
/ 19 марта 2012

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

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

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

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