O que tudo deveria estar acontecendo durante a tela "Carregando"?

19

Eu só preciso criar instâncias de todos os meus gráficos na memória carregados do arquivo? Qual a melhor forma de lidar com isto? Eu só preciso de algum tipo de gerenciador de ativos que crie essas instâncias gráficas durante a tela de carregamento e depois seja referido posteriormente?

Quais são as coisas comuns que precisam ser pré-carregadas nos jogos? Quanto devo pré-carregar?

Vale a pena mostrar algum tipo de barra de progresso? Como posso manter o tempo de carregamento curto? Como deve ser a tela de carregamento?

Quais são alguns bons exemplos de telas de carregamento? Algum exemplo de código?

Especificamente, meu jogo é para Andriod (Java / mobile), mas fique à vontade para tornar suas respostas genéricas.

Bryan Denny
fonte
2
Sei que não é exatamente isso que você está pedindo, mas meu conselho para o que deveria estar acontecendo durante a tela de carregamento é: Algo interessante! :) Divirta o jogador com um pouco de história (como uma cena), um minijogo ou talvez já mostre um menu na medida do possível.
Bart van Heukelom

Respostas:

13

O que é típico de pré-carregar é tudo o que você precisará em tempo real. Excepto conceitos como clipmaps e megatextures (onde a idéia é carregar as partes necessárias e atualizá-las iterativamente à medida que você se desloca no mundo), você desejará manter tudo o que precisa para seu nível / área / qualquer outra coisa na memória e não no disco. O IO é sloooow e você não deseja carregar suas texturas quando virar a esquina e ela está prestes a ser exibida. E por tudo, quero dizer texturas, sons, malhas, metadados ... tudo.

Se você pode mostrar uma barra de progresso (ou seja, você tem um mapeamento preciso das etapas de carregamento em porcentagem), então mostre-a. Caso contrário, mostre pelo menos algo, como uma mensagem curta de texto ou um indicador de carregamento, que é atualizado após cada etapa, para que você possa ao menos dizer que algo está acontecendo.

Se houver algo que você sabe que será necessário, mas não imediatamente, você pode carregá-lo em segundo plano e interromper o jogo (não ótimo, mas certifique-se de que isso raramente aconteça) se for necessário muito cedo. Isso ajudará você a manter o tempo de carregamento baixo. Eu não sei muito sobre o desenvolvimento do Android, ou se será demais para o dispositivo lidar com o jogo, mas geralmente é bastante leve na CPU, por isso não deve haver um grande problema lá.

falstro
fonte
19

Você precisa estar "Reticulating Splines"

AShelly
fonte
2
Haha, boa referência :)
Bryan Denny
Embora isso seja obviamente uma piada, +1 por fazer referência a um ótimo exemplo de manter os jogadores ocupados durante o carregamento. Uma técnica tão simples que não envolve mais esforço do que adicionar texto sem sentido. "Don't Starve" é outro exemplo de jogo que faz isso bem, e também coincidentemente (ou não) também envolve "Reticulating": dont-starve-game.wikia.com/wiki/World_Generation_Screen
sexta-
3

Depende se você estiver indo para uma tela de carregamento e transições instantâneas de nível ou várias cargas.
Eu diria que o último seria melhor na memória.
Algo como:
//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

E quando você estiver carregando, certifique-se de não ter uma tela preta. Ou, nesse caso, uma tela estática. Muitas vezes eu vi uma imagem estática por um tempo no início de um aplicativo e pensei imediatamente que ela havia travado.
Uma boa maneira de envolver o jogador simplesmente seria um plano de fundo bem desenhado de uma cena no jogo, ou alguma referência à história; uma barra de carregamento com / sem porcentagem, desde que não seja um 'carregamento' estático; e então talvez algumas informações.

O Pato Comunista
fonte
1
Pete Pete, no entanto, se você tiver uma barra de carregamento animada com uma porcentagem, faça com que ela suba gradualmente e com precisão, em vez de ficar em 10% por 90% do tempo e depois pular para 100%. Se você tiver uma animação de carregamento que não seja percentual, faça-o de forma que ele faça uma pesquisa no carregamento - para que você possa pará-lo quando o carregamento travar por algum motivo. Eu vejo muitos jogos que animam a animação de carregamento em seu próprio segmento e, quando o segmento de carregamento trava, a animação é executada. Isso meio que derrota o objetivo da animação de carregamento.
Kaj
Eu posso concordar inteiramente lá. Eu não acho que terá sido bem feito se saltar assim.
The Duck Comunista
2

Nas plataformas iphone e Android, você deve carregar todas as texturas e sons. O carregamento de texturas e sons é muito lento em telefones antigos como iphone 2G, 3G ou G1. Você não pode fazer isso no jogo.

Ellis
fonte
2

Como já foi dito, se você puder carregar todos os dados de um nível antes de começar a jogá-lo, terá um desempenho muito melhor. É uma fonte comum de problemas no período de tempo para carregar ativos durante o jogo.

Coisas comuns a serem feitas durante uma tela de carregamento é uma imagem de fundo estática, um nível muito simples, algumas dicas e truques sobre como jogar, animações rápidas etc.

Aqui está a tela de carregamento do APB. Muito legal. :) http://www.youtube.com/watch?v=p5STix1t_1E&feature=related

Aqui está um pseudo-código para mostrar uma barra de progresso em uma tela de carregamento:



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);
  }
}

Ugh, forçado a usar! = Porque interrompeu a renderização do código quando usei <

Srekel
fonte
1
Uau, telas de carga APB aspecto é muito legal :)
Bryan Denny
Se você recuar seu código com quatro espaços em vez de usar as marcas <pre> <code>, poderá usar <em vez de! = Sem interromper a formatação.
mmyers
mmyers, sim, mas isso é uma grande dor na bunda. Por que não há apenas uma tag de código personalizada?
Srekel 7/08
1

As telas de carregamento podem ser usadas para ocultar praticamente qualquer coisa; carregamento de ativos, quaisquer conexões que ele precise fazer (tcp, etc), preenchendo mapas com objetos de jogo e inicialização.

A maneira como costumo lidar com as coisas é ter algum tipo de gerente de ativos (ou talvez um gerente para cada tipo de ativo - sons, gráficos etc.) e fazer com que carreguem o que será usado na memória. Depois, faça com que seu jogo retire referências dos gerentes.

Mostrar uma barra de progresso, determinar o que pré-carregar, etc. parece depender do seu projeto, é o tempo de carregamento e o seu gosto. As barras de progresso são boas se forem precisas e são uma carga longa (é bom saber quanto tempo você precisa esperar).

Com isso dito, no meu telefone Android, eu tendem a favorecer aplicativos que têm sua própria tela de carregamento personalizada e de bom gosto. Não precisa de uma barra, mas a animação informa ao usuário os programas que estão funcionando. Eu acredito que o Android tem uma barra padrão que você pode usar, o que faz o trabalho bem.

Aqui está uma pergunta SO que pode lhe interessar.

cmjreyes
fonte
1

Vale ressaltar que as plataformas com requisitos de controle de qualidade (por exemplo, X360, PS3, DS etc.) exigirão que você tenha alguma forma de animação na tela de carregamento (ou na verdade qualquer tela que permaneça estática por mais de alguns segundos )

Isso ocorre porque, caso contrário, o usuário pode pensar que seu jogo travou, quando na verdade está demorando muito para carregar. Mesmo quando isso não é um requisito, eu certamente o aconselharia.

Qualquer forma de animação é boa, mas uma barra de progresso simples pode não ser a melhor, pois grandes etapas no carregamento podem fazer com que a barra de progresso não se mova por um tempo, o que significa que a tela é tão estática como se houvesse sem bar. Melhor mostrar alguma imagem em movimento contínuo, como um ícone rotativo, além de um indicador de progresso.

MrCranky
fonte
1
Obviamente, se o carregador estiver carregando de forma assíncrona, você poderá pesquisar o progresso para poder atualizar com mais precisão a porcentagem. Dessa forma, o jogador sabe que, se ficar preso em uma porcentagem, algo estará realmente errado. Além disso, como eu disse em outros lugares, não atualize a animação sem verificar com o fio de carregamento se ele ainda está em execução, ou você ficará feliz girando enquanto o jogo travar efetivamente.
Kaj
1

Para as telas de carregamento do Conquest , eu acompanhava um pouco da descrição da missão (que tipo de jogo era, assim como um pouco da história da missão) e alguma ajuda básica sobre os comandos.

No fundo, eu estava carregando sons. Os gráficos eram todos carregados sob demanda, e isso parecia funcionar muito bem para o nosso jogo, mas os sons eram um urso, então eu pré-carreguei todos os sons necessários para a missão. O botão Carregando / Iniciar fica desativado até que tudo esteja carregado, mas não tenho nenhum tipo de animação (o que seria uma boa coisa para adicionar).

Este é o nosso primeiro jogo, então ainda estamos aprendendo muito, mas isso funcionou bem para nós até agora.

Tela de carregamento da conquista

Matt McMinn
fonte