Что все должно происходить во время экрана «Загрузка»?

19

Мне просто нужно создавать экземпляры всей моей графики в память, которые загружаются из файла? Каков наилучший способ справиться с этим? Нужен ли мне какой-то менеджер ресурсов, который создает эти графические экземпляры во время экрана загрузки, а затем обращается к ним позже?

Каковы общие вещи, которые должны быть предварительно загружены в играх? Сколько я должен предварительно загрузить?

Стоит ли показывать какой-то индикатор прогресса? Как я могу сократить время загрузки? Как должен выглядеть экран загрузки?

Каковы хорошие примеры загрузки экранов? Есть примеры кода?

В частности, моя игра для Andriod (Java / Mobile), но не стесняйтесь сделать ваши ответы общими.

Брайан Денни
источник
2
Я знаю, что это не совсем то, о чем вы просите, но мой совет относительно того, что должно происходить во время загрузки экрана: что-то интересное! :) Развлеките игрока небольшой историей (например, заставкой), мини-игрой или, возможно, уже покажите меню, насколько это возможно.
Барт ван Хейкелом

Ответы:

13

Типичные вещи для предварительной загрузки - это все, что вам нужно в режиме реального времени. За исключением таких понятий, как клип-карты и мегатекстуры (где идея состоит в том, чтобы загружать нужные вам части и итеративно обновлять их по мере перемещения по миру), вы захотите сохранить все необходимое для своего уровня / области / чего бы то ни было в памяти, а не на диске. IO - sloooow, и вы не хотите загружать свои текстуры, когда вы поворачиваете за угол, и он собирается отображаться. И под всем, я имею в виду текстуры, звуки, сетки, метаданные ... все.

Если вы можете показать индикатор выполнения (т. Е. У вас есть точное отображение шагов загрузки в процентах), то непременно покажите его. Если нет, то хотя бы покажите что-нибудь, например, короткое текстовое сообщение или индикатор загрузки, который обновляется после каждого шага, чтобы вы могли хотя бы сказать, что что-то происходит.

Если есть что-то, что, как вы знаете, понадобится, но не сразу, вы можете загрузить это в фоновом режиме и остановить игру (не здорово, но убедитесь, что это случается редко), если это необходимо слишком рано. Это поможет вам сократить время загрузки. Я не очень разбираюсь в разработке для Android, и не слишком ли много устройство будет обрабатывать вместе с игрой, но, как правило, оно довольно слабое на процессоре, поэтому там не должно быть больших проблем.

falstro
источник
19

Вы должны быть "Сетчатые сплайны"

AShelly
источник
2
Ха-ха, хорошая ссылка :)
Брайан Денни
Хотя это, очевидно, шутка, +1 за прекрасный пример сохранения игроков занятыми во время загрузки. Такая простая техника, которая требует не больше усилий, чем добавление бессмысленного текста. «Не голодать» - это еще один пример игры, которая делает это хорошо, а также по совпадению (или нет) также включает в себя « ретикуляцию
twiz
3

Зависит от того, хотите ли вы использовать один экран загрузки и мгновенные переходы уровней или несколько загрузок.
Я бы сказал, что последний будет лучше по памяти.
Что-то вроде:
//First loading screen
Load menu layouts or whatever
Load GUI assets
Show something to pass the time
Switch to menu

//In between levels
Remove any graphics specific to the last level - get rid of something that isn't going to reappear like a boss.
Load level graphics that haven't already been loaded
Again, show progress or something to pass the time

И когда вы загружаете, убедитесь, что у вас нет черного экрана. Или в этом отношении статический экран. Много раз я некоторое время видел статическое изображение при запуске приложения и сразу думал, что оно сломалось.
Хороший способ вовлечь игрока в игру - это хорошо нарисованный фон сцены в игре или какой-нибудь сюжетный справочник; полоса загрузки с / без процентов, если она не является статической «Загрузка»; а затем, возможно, некоторая информация.

Коммунистическая утка
источник
1
Хотя, ради Пита, если у вас есть анимирующая полоса загрузки с процентом, сделайте так, чтобы она двигалась постепенно и точно, вместо того, чтобы оставаться на уровне 10% в течение 90% времени, а затем прыгать до 100%. Если у вас анимация загрузки в процентах, по крайней мере, сделайте так, чтобы она опрашивала загрузку - таким образом, вы можете остановить ее, когда загрузка по какой-то причине падает. Я вижу слишком много игр, которые анимируют загрузочную анимацию в своем собственном потоке, и когда загрузочный поток падает, анимация успешно воспроизводится. Это побеждает цель загрузки анимации.
Кадж
Я могу полностью согласиться с этим. Я не думаю, что это будет сделано хорошо, если так прыгнет.
Коммунистическая утка
2

На платформах iphone и Android вы должны загрузить все текстуры и звуки. Загрузка текстур и звуков очень медленная на старых телефонах, таких как iphone 2G, 3G или G1. Вы не можете сделать это в игре.

Эллис
источник
2

Как уже говорили другие, если вы сможете загрузить все данные уровня до того, как начнете его воспроизводить, то у вас будет намного лучшая производительность. Это распространенный источник проблем во время кадра для загрузки ресурсов во время игры.

Обычные вещи во время загрузки экрана - это статическое фоновое изображение, очень простой уровень, несколько советов и подсказок о том, как играть, быстрая анимация и т. Д.

Вот экран загрузки для APB. Довольно круто. :) http://www.youtube.com/watch?v=p5STix1t_1E&feature=related

Вот некоторый псевдокод для отображения индикатора выполнения на экране загрузки:



LoadScreen::Init()
{
  mAssetsToLoad.add("Background.png");
  mAssetsToLoad.add("Player.png");
}

LoadScreen::Update()
{
  mProgress += 1;
  mAssetManager.load(mAssetsToLoad.top());
  mAssetsToLoad.pop();

  if mAssetsToLoad.empty()
    mDone = true;
}


LoadScreen::Draw()
{
  for( int i = 0; i != mProgress; ++i)
  {
     Vector2 pos(i*mProgressPartTexture.Width, 100);
     DrawProgressBarPart(pos, mProgressPartTexture);
  }
}

Тьфу, вынужден использовать! = Потому что он прервал рендеринг кода, когда я использовал <

Srekel
источник
1
Ничего себе, загрузочные экраны APB выглядят очень круто :)
Брайан Денни
Если вы сделаете отступ в коде с четырьмя пробелами вместо использования тегов <pre> <code>, вы сможете использовать <вместо! = Без прерывания форматирования.
mmyers
ммерс, да, но это большая боль в заднице. Почему нет только пользовательского тега кода?
Срекел
1

Загрузочные экраны могут быть использованы, чтобы скрыть почти все; загрузка ресурсов, любых необходимых соединений (tcp и т. д.), заполнение карт игровыми объектами и инициализация.

У меня есть тенденция к тому, чтобы иметь дело с каким-то менеджером активов (или, может быть, менеджером для каждого типа активов - звуков, графики и т. Д.) И заставлять их загружать то, что будет использоваться в память. Тогда просто сделайте так, чтобы ваша игра вытащила ссылки из менеджеров.

Отображение индикатора выполнения, определение того, что предварительно загружать и т. Д., Кажется, зависит от вашего проекта, времени загрузки и ваших вкусов. Индикаторы прогресса хороши, если они точны и долго загружаются (приятно знать, как долго нужно ждать).

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

Вот такой вопрос, который может вас заинтересовать.

cmjreyes
источник
1

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

Это связано с тем, что в противном случае пользователь может подумать, что ваша игра потерпела крах, хотя на самом деле загрузка занимает много времени. Даже там, где это не является обязательным требованием, я бы, конечно, посоветовал это.

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

MrCranky
источник
1
Конечно, если загрузчик загружается асинхронно, вы должны иметь возможность опрашивать его прогресс, чтобы вы могли более точно обновить процент. Таким образом, игрок знает, что если он застрял в процентах, что-то на самом деле не так. Кроме того, как я уже говорил в других местах, пожалуйста, не обновляйте анимацию, не проверив в своей загрузочной нити, работает ли она по-прежнему, или вы будете счастливо вращаться, пока игра эффективно рушится.
Кадж
1

Для экранов загрузки в Conquest , я пошел с небольшим описанием миссии (какой тип игры это было, а также немного сюжетной линии для миссии) и некоторой базовой справкой по командам.

На заднем плане я загружал звуки. Графика была загружена по требованию, и это, казалось, работало довольно хорошо для нашей игры, но звуки были медвежьим, поэтому я предварительно загрузил все звуки, необходимые для миссии. Кнопка Загрузка / Пуск отключена, пока все не загружено, но у меня нет анимации какого-либо типа (что было бы неплохо добавить).

Это наша первая игра, поэтому мы все еще многому учимся, но пока у нас все получилось.

Экран загрузки Conquest

Мэтт МакМинн
источник