¿Qué debería estar sucediendo durante la pantalla "Cargando"?

19

¿Solo necesito crear instancias de todos mis gráficos en la memoria que se cargan desde el archivo? ¿Cuál es la mejor manera de manejar esto? ¿Solo necesito algún tipo de administrador de activos que cree estas instancias gráficas durante la pantalla de carga y luego se haga referencia a él?

¿Cuáles son las cosas comunes que deben cargarse previamente en los juegos? ¿Cuánto debo precargar?

¿Vale la pena mostrar algún tipo de barra de progreso? ¿Cómo puedo mantener cortos los tiempos de carga? ¿Cómo debería ser la pantalla de carga?

¿Cuáles son algunos buenos ejemplos de pantallas de carga? ¿Algún ejemplo de código?

Específicamente, mi juego es para Andriod (Java / mobile), pero no dudes en hacer que tus respuestas sean genéricas.

Bryan Denny
fuente
2
Sé que esto no es específicamente lo que está pidiendo, pero mi consejo sobre lo que debería estar sucediendo durante la pantalla de carga es: ¡Algo interesante! :) Entretenga al jugador con un poco de historia (como una escena), un minijuego o tal vez ya muestre un menú en la medida de lo posible.
Bart van Heukelom

Respuestas:

13

Las cosas típicas para precargar son todo lo que necesitará en tiempo real. Ahorre para conceptos como mapas de clip y texturas megate (donde la idea es cargar las piezas que necesita y actualizarlas de forma iterativa a medida que se mueve por el mundo), querrá conservar todo lo que necesita para su nivel / área / lo que sea en memoria en lugar de en disco. IO es lento, y no desea cargar sus texturas cuando dobla la esquina y está a punto de mostrarse. Y por todo, me refiero a texturas, sonidos, mallas, metadatos ... todo.

Si puede mostrar una barra de progreso (es decir, tiene una asignación precisa de los pasos de carga en porcentaje), entonces muéstrela por todos los medios. Si no, al menos muestre algo, como un mensaje de texto breve o un indicador de carga, que se actualiza después de cada paso para que al menos pueda darse cuenta de que algo está sucediendo.

Si hay algo que sabe que se necesitará, pero no de inmediato, puede cargarlo en segundo plano y detener el juego (no es genial, pero asegúrese de que rara vez ocurra) si es necesario demasiado pronto. Esto lo ayudará a reducir el tiempo de carga. No sé mucho sobre el desarrollo de Android, o si será demasiado para que el dispositivo lo maneje junto con el juego, pero generalmente es bastante ligero en la CPU, por lo que no debería haber un gran problema allí.

falstro
fuente
19

Necesitas estar "Reticulando Splines"

AShelly
fuente
2
Jaja, buena referencia :)
Bryan Denny
Aunque esto es obviamente una broma, +1 para hacer referencia a un gran ejemplo de mantener a los jugadores ocupados durante la carga. Una técnica tan simple que no implica más esfuerzo que agregar texto sin sentido. "Don't Starve" es otro ejemplo de un juego que hace esto bien, y casualmente (o no) también involucra "Reticulating": dont-starve-game.wikia.com/wiki/World_Generation_Screen
twiz
3

Depende de si vas por una pantalla de carga y transiciones de nivel instantáneas o múltiples cargas.
Yo diría que este último sería mejor en la memoria.
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

Y cuando esté cargando, asegúrese de no tener una pantalla en negro. O para el caso, una pantalla estática. Muchas veces he visto una imagen estática durante un tiempo al inicio de una aplicación, e inmediatamente pensé que se había bloqueado.
Una buena manera de involucrar al jugador simplemente sería un fondo bien dibujado de una escena en el juego, o alguna referencia de la historia; una barra de carga con / sin porcentaje, siempre que no sea una 'Carga' estática; y luego tal vez alguna información.

El pato comunista
fuente
1
Sin embargo, por el bien de Pete, si tiene una barra de carga animada con un porcentaje, hágalo de manera gradual y precisa en lugar de permanecer al 10% durante el 90% del tiempo y luego saltar al 100%. Si tiene una animación de carga no porcentual, al menos hágalo para que sondee la carga, de esa manera puede detenerla cuando la carga se bloquee por alguna razón. Veo demasiados juegos que animan la animación de carga en su propio hilo, y cuando el hilo de carga falla, la animación continúa felizmente. Eso daña un poco el propósito de la animación de carga.
Kaj
Estoy totalmente de acuerdo allí. No creo que se haya hecho bien si salta así.
El pato comunista el
2

En las plataformas de iPhone y Android, debe cargar todas las texturas y sonidos. La carga de texturas y sonidos es realmente lenta en teléfonos antiguos como iphone 2G, 3G o G1. No puedes hacerlo en el juego.

Ellis
fuente
2

Como han dicho otros, si puede cargar todos los datos de un nivel antes de comenzar a jugarlo, tendrá un rendimiento mucho mejor. Es una fuente común de problemas en el tiempo de cuadro para cargar activos durante el juego.

Las cosas comunes que se deben hacer durante una pantalla de carga es una imagen de fondo estática, un nivel muy simple, algunos consejos y trucos sobre cómo jugar, animaciones rápidas, etc.

Aquí está la pantalla de carga para APB. Bastante jodidamente genial. :) http://www.youtube.com/watch?v=p5STix1t_1E&feature=related

Aquí hay un pseudocódigo para mostrar una barra de progreso en una pantalla de carga:



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

¡Uf, obligado a usar! = Porque interrumpió la representación del código cuando usé <

Srekel
fuente
1
Wow, las pantallas de carga APB se ven realmente geniales :)
Bryan Denny
Si sangra su código con cuatro espacios en lugar de usar las etiquetas <pre> <code>, podrá usar <en lugar de! = Sin romper el formato.
mmyers
mmyers, sí, pero eso es un gran dolor en el culo. ¿Por qué no hay solo una etiqueta de código personalizada?
Srekel
1

Las pantallas de carga se pueden usar para ocultar casi cualquier cosa; carga de activos, cualquier conexión que necesite hacer (tcp, etc.), llenar mapas con objetos del juego e inicialización.

La forma en que tiendo a hacer las cosas es tener algún tipo de administrador de activos (o tal vez un administrador para cada tipo de activo: sonidos, gráficos, etc.) y hacer que carguen lo que se va a usar en la memoria. Luego, solo haz que tu juego extraiga referencias de los gerentes.

Mostrar una barra de progreso, determinar qué precargar, etc. parece depender de su proyecto, los tiempos de carga y sus gustos. Las barras de progreso son buenas si son precisas y es una carga larga (es bueno saber cuánto tiempo debe esperar).

Dicho esto, en mi teléfono Android tiendo a favorecer las aplicaciones que tienen su propia pantalla de carga personalizada y hecha con buen gusto. No necesita una barra, pero la animación le dice al usuario que los programas funcionan. Creo que Android tiene una barra predeterminada que puedes usar, que hace el trabajo bien.

Aquí hay una pregunta SO que podría interesarle.

cmjreyes
fuente
1

Vale la pena señalar que las plataformas con requisitos de control de calidad (por ejemplo, X360, PS3, DS, etc.) requerirán que tengas algún tipo de animación en tu pantalla de carga (o de hecho, cualquier pantalla que permanezca estática durante más de unos segundos) )

Esto se debe a que, de lo contrario, el usuario puede pensar que su juego se ha bloqueado, cuando en realidad solo lleva mucho tiempo cargarlo. Incluso cuando esto no sea un requisito, sin duda lo recomendaría.

Cualquier forma de animación está bien, pero una barra de progreso simple puede no ser la mejor, ya que cualquier paso grande en la carga puede hacer que la barra de progreso no se mueva por un tiempo, lo que significa que la pantalla es tan estática como si hubiera No hay bar en absoluto. Es mejor mostrar alguna imagen en movimiento continuo, como un icono giratorio, además de un indicador de progreso.

MrCranky
fuente
1
Por supuesto, si el cargador se está cargando de forma asincrónica, debería poder sondear su progreso para poder actualizar con mayor precisión el porcentaje. De esa forma, el jugador sabe que si se atasca en un porcentaje, algo está realmente mal. Además, como dije en otros lugares, no actualices la animación sin verificar con tu hilo de carga si aún se está ejecutando, o estarás girando felizmente mientras el juego se bloqueó efectivamente.
Kaj
1

Para las pantallas de carga en Conquest , fui con un poco de descripción de la misión (de qué tipo de juego era, así como un poco de historia para la misión), y algo de ayuda básica sobre los comandos.

En el fondo, estaba cargando sonidos. Todos los gráficos se cargaron a pedido, y eso parecía funcionar bastante bien para nuestro juego, pero los sonidos eran un oso, así que precargué todos los sonidos necesarios para la misión. El botón Cargando / Iniciar está deshabilitado hasta que todo esté cargado, pero no tengo ningún tipo de animación (lo cual sería bueno agregar).

Este es nuestro primer juego, así que todavía estamos aprendiendo mucho, pero hasta ahora nos ha funcionado bien.

Pantalla de carga de conquista

Matt McMinn
fuente