Que devrait-il se passer pendant l'écran «Chargement»?


19

Dois-je simplement créer des instances de tous mes graphiques en mémoire chargés à partir d'un fichier? Quelle est la meilleure façon de gérer cela? Ai-je juste besoin d'une sorte de gestionnaire d'actifs qui crée ces instances graphiques pendant l'écran de chargement et qui est ensuite mentionné plus tard?

Quelles sont les choses courantes qui doivent être préchargées dans les jeux? Combien devrais-je pré-charger?

Vaut-il la peine de montrer une sorte de barre de progression? Comment puis-je garder des temps de chargement courts? À quoi devrait ressembler l'écran de chargement?

Quels sont les bons exemples d'écrans de chargement? Des exemples de code?

Plus précisément, mon jeu est pour Andriod (Java / mobile), mais n'hésitez pas à rendre vos réponses génériques.


2
Je sais que ce n'est pas précisément ce que vous demandez, mais mon conseil pour ce qui devrait se passer pendant l'écran de chargement est: Quelque chose d'intéressant! :) Amusez le joueur avec un peu d'histoire (comme une cinématique), un mini-jeu, ou peut-être déjà montrer un menu dans la mesure du possible.
Bart van Heukelom

Réponses:


13

Les éléments typiques à précharger sont tout ce dont vous aurez besoin en temps réel. Enregistrez pour des concepts tels que des clipmaps et des megatextures (où l'idée est de charger les pièces dont vous avez besoin et de les mettre à jour de manière itérative lorsque vous vous déplacez dans le monde), vous allez vouloir garder tout ce dont vous avez besoin pour votre niveau / zone / quoi que ce soit en mémoire plutôt que sur disque. IO est lent, et vous ne voulez pas charger vos textures lorsque vous tournez au coin et qu'il est sur le point d'être affiché. Et par tout, je veux dire des textures, des sons, des maillages, des métadonnées ... tout.

Si vous pouvez afficher une barre de progression (c'est-à-dire que vous avez un mappage précis des étapes de chargement en pourcentage), alors affichez-le par tous les moyens. Sinon, affichez au moins quelque chose, comme un court message texte ou un indicateur de chargement, qui est mis à jour après chaque étape afin que vous puissiez au moins dire que quelque chose se passe.

S'il y a quelque chose dont vous savez qu'il sera nécessaire, mais pas tout de suite, vous pouvez le charger en arrière-plan et bloquer le jeu (pas génial, mais assurez-vous qu'il se produit rarement) s'il est nécessaire trop tôt. Cela vous aidera à réduire le temps de chargement. Je ne sais pas grand-chose sur le développement Android, ou si ce sera trop pour l'appareil à gérer en parallèle du jeu, mais il est généralement assez léger sur le processeur, donc il ne devrait pas y avoir de gros problème.


19

Vous devez être "Splines réticulantes"


2
Haha, belle référence :)
Bryan Denny

Bien que ce soit évidemment une blague, +1 pour faire référence à un excellent exemple de maintien des joueurs occupés pendant le chargement. Une technique si simple qui ne nécessite pas plus d'efforts que l'ajout de texte absurde. "Don't Starve" est un autre exemple d'un jeu qui fait cela bien, et aussi par coïncidence (ou non) implique également " Réticuler
twiz

3

Cela dépend si vous optez pour un écran de chargement et des transitions de niveau instantanées ou plusieurs chargements.
Je dirais que ce dernier serait meilleur de mémoire.
Quelque chose comme:
//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

Et lorsque vous chargez, assurez-vous de ne pas avoir d'écran noir. Ou d'ailleurs, un écran statique. Plusieurs fois, j'ai vu une image statique pendant un certain temps au début d'une application et j'ai immédiatement pensé qu'elle s'était écrasée.
Un bon moyen d'impliquer simplement le joueur serait un arrière-plan joliment dessiné d'une scène dans le jeu, ou une référence de scénario; une barre de chargement avec / sans pourcentage, tant qu'il ne s'agit pas d'un «chargement» statique; puis peut-être quelques informations.


1
Par souci de Pete cependant, si vous avez une barre de chargement animée avec un pourcentage, faites en sorte qu'elle monte progressivement et avec précision au lieu de rester à 10% pendant 90% du temps, puis de sauter à 100%. Si vous avez une animation de chargement sans pourcentage, faites-la au moins pour qu'elle interroge le chargement - de cette façon, vous pouvez l'arrêter lorsque le chargement se bloque pour une raison quelconque. Je vois trop de jeux qui animent l'animation de chargement dans leur propre thread, et lorsque le thread de chargement se bloque, l'animation se joue joyeusement. Cela va un peu à l'encontre du but de l'animation de chargement.
Kaj

Je suis entièrement d'accord là-dessus. Je ne pense pas que ça aura été bien fait si ça saute comme ça.
The Communist Duck

2

Sur les plateformes iPhone et Android, vous devez charger toutes les textures et tous les sons. Le chargement des textures et des sons est très lent sur les anciens téléphones comme l'iphone 2G, 3G ou G1. Vous ne pouvez pas le faire dans le jeu.


2

Comme d'autres l'ont dit, si vous pouvez charger toutes les données d'un niveau avant de commencer à le jouer, vous aurez de bien meilleures performances. C'est une source fréquente de problèmes dans le temps d'image pour charger des ressources pendant le jeu.

Les choses courantes à faire pendant un écran de chargement sont une image de fond statique, un niveau très simple, quelques conseils et astuces sur la façon de jouer, des animations rapides, etc.

Voici l'écran de chargement pour APB. Assez cool. :) http://www.youtube.com/watch?v=p5STix1t_1E&feature=related

Voici un pseudo-code pour afficher une barre de progression dans un écran de chargement:



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, forcé d'utiliser! = Parce qu'il a interrompu le rendu du code quand j'ai utilisé <


1
Wow, les écrans de chargement APB sont vraiment cool :)
Bryan Denny

Si vous indentez votre code avec quatre espaces au lieu d'utiliser les balises <pre> <code>, vous pourrez utiliser <au lieu de! = Sans interrompre la mise en forme.
mmyers

mmyers, oui, mais c'est une grosse douleur dans le cul. Pourquoi n'y a-t-il pas simplement une balise de code personnalisée?
Srekel

1

Les écrans de chargement peuvent être utilisés pour cacher à peu près n'importe quoi; chargement des ressources, toutes les connexions nécessaires (tcp, etc.), remplissage des cartes avec des objets de jeu et initialisation.

La façon dont j'ai tendance à faire les choses est d'avoir une sorte de gestionnaire d'actifs (ou peut-être un gestionnaire pour chaque type d'actif - sons, graphiques, etc.) et de les charger de charger ce qui va être utilisé en mémoire. Ensuite, demandez à votre jeu d'extraire les références des gestionnaires.

L'affichage d'une barre de progression, la détermination des éléments à précharger, etc. semblent dépendre de votre projet, des temps de chargement et de vos goûts. Les barres de progression sont agréables si elles sont précises et si la charge est longue (il est bon de savoir combien de temps vous devez attendre).

Cela dit, sur mon téléphone Android, j'ai tendance à privilégier les applications qui ont leur propre écran de chargement personnalisé et fait avec goût. Il n'a pas besoin d'une barre, mais l'animation indique à l'utilisateur les programmes qui fonctionnent. Je pense qu'Android a une barre par défaut que vous pouvez utiliser, ce qui fait très bien l'affaire.

Voici une question SO qui pourrait vous intéresser.


1

Il convient de noter que les plates-formes avec des exigences de contrôle de qualité (par exemple X360, PS3, DS, etc.) exigeront toutes que vous ayez une forme d'animation dans votre écran de chargement (ou en fait tout écran qui reste statique pendant plus de quelques secondes) ).

C'est parce que sinon l'utilisateur peut penser que votre jeu est tombé en panne, alors qu'en fait, il prend juste beaucoup de temps à charger. Même lorsque ce n'est pas une exigence, je le conseillerais certainement.

N'importe quelle forme d'animation est correcte, mais une simple barre de progression peut ne pas être la meilleure, car toute étape importante du chargement peut faire en sorte que la barre de progression ne bouge pas du tout pendant un certain temps, ce qui signifie que l'écran est tout aussi statique que s'il y en avait pas de bar du tout. Mieux vaut montrer une image en mouvement continu, comme une icône en rotation, en plus d'un indicateur de progression.


1
Bien sûr, si le chargeur se charge de manière asynchrone, vous devriez être en mesure d'interroger sa progression afin de pouvoir mettre à jour plus précisément le pourcentage. De cette façon, le joueur sait que s'il reste bloqué à un pourcentage, quelque chose ne va pas. De plus, comme je l'ai dit dans d'autres endroits, veuillez ne pas mettre à jour l'animation sans vérifier avec votre fil de chargement si elle est toujours en cours d'exécution, ou vous tournerez avec plaisir pendant que le jeu plante.
Kaj

1

Pour les écrans de chargement dans Conquest , je suis allé avec un peu de description de la mission (de quel type de jeu il s'agissait, ainsi qu'un peu de scénario pour la mission), et une aide de base sur les commandes.

En arrière-plan, je chargeais des sons. Les graphismes étaient tous chargés à la demande, et cela semblait assez bien fonctionner pour notre jeu, mais les sons étaient un ours, donc j'ai préchargé tous les sons nécessaires à la mission. Le bouton Loading / Start est désactivé jusqu'à ce que tout soit chargé, mais je n'ai aucun type d'animation (ce qui serait une bonne chose à ajouter).

C'est notre premier match, donc nous apprenons encore beaucoup, mais cela a bien fonctionné pour nous jusqu'à présent.

Écran de chargement de Conquest

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.