Cosa dovrebbe succedere durante la schermata "Caricamento"?


19

Devo solo creare istanze di tutta la mia grafica in memoria che vengono caricate dal file? Qual è il modo migliore per gestirlo? Ho solo bisogno di una sorta di gestore di risorse che crei queste istanze grafiche durante la schermata di caricamento e che verrà quindi indicato in seguito?

Quali sono le cose comuni che devono essere precaricate nei giochi? Quanto devo pre-caricare?

Vale la pena mostrare una sorta di barra di avanzamento? Come posso ridurre i tempi di caricamento? Come dovrebbe apparire la schermata di caricamento?

Quali sono alcuni buoni esempi di caricamento delle schermate? Qualche esempio di codice?

In particolare, il mio gioco è per Andriod (Java / mobile), ma sentiti libero di rendere generiche le tue risposte.


2
So che questo non è esattamente ciò che stai chiedendo, ma il mio consiglio per ciò che dovrebbe accadere durante la schermata di caricamento è: Qualcosa di interessante! :) Intrattieni il giocatore con un po 'di storia (come un filmato), un minigioco o forse già mostra un menu per quanto possibile.
Bart van Heukelom,

Risposte:


13

Le cose tipiche da precaricare sono tutto ciò di cui avrai bisogno in tempo reale. Salvo concetti come clipmap e megatexture (dove l'idea è di caricare le parti di cui hai bisogno e aggiornarle iterativamente mentre ti muovi nel mondo), vorrai mantenere tutto ciò che ti serve per il tuo livello / area / qualunque cosa in memoria piuttosto che su disco. IO è sloooow e non vuoi caricare le tue trame quando giri l'angolo e sta per essere visualizzato. E per tutto, intendo trame, suoni, mesh, metadati ... tutto.

Se riesci a mostrare una barra di avanzamento (cioè hai una mappatura accurata delle fasi di caricamento in percentuale), allora mostrala a tutti. In caso contrario, mostra almeno qualcosa, come un breve messaggio di testo o un indicatore di caricamento, che viene aggiornato dopo ogni passaggio in modo da poter almeno dire che qualcosa sta accadendo.

Se c'è qualcosa che sai sarà necessario, ma non subito, puoi caricarlo in background e bloccare il gioco (non eccezionale, ma assicurati che accada raramente) se è necessario troppo presto. Questo ti aiuterà a ridurre i tempi di caricamento. Non so molto sullo sviluppo di Android, o se sarà troppo da gestire per il dispositivo insieme al gioco, ma di solito è piuttosto leggero sulla CPU, quindi non dovrebbe esserci un grosso problema lì.


19

Devi essere "Reticulation Splines"


2
Ahah, bel riferimento :)
Bryan Denny il

Anche se questo è ovviamente uno scherzo, +1 per fare riferimento a un ottimo esempio di come mantenere i giocatori occupati durante il caricamento. Una tecnica così semplice che non richiede più sforzo dell'aggiunta di testo senza senso. "Don't Starve" è un altro esempio di gioco che lo fa bene, e anche per coincidenza (o no) comporta anche "Reticulation": dont-starve-game.wikia.com/wiki/World_Generation_Screen
twiz

3

Dipende se stai andando per una schermata di caricamento e transizioni di livello istantaneo o carichi multipli.
Direi che quest'ultimo sarebbe meglio in memoria.
Qualcosa di simile a:
//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 stai caricando, assicurati di non avere uno schermo nero. O del resto, uno schermo statico. Molte volte ho visto un'immagine statica per un po 'all'inizio di un'app e ho immediatamente pensato che si fosse bloccato.
Un buon modo per coinvolgere il giocatore sarebbe semplicemente uno sfondo ben disegnato di una scena del gioco, o qualche riferimento alla trama; una barra di caricamento con / senza percentuale, purché non sia un "caricamento" statico; e poi forse alcune informazioni.


1
Per amor di Pete, se hai una barra di caricamento animata con una percentuale, fallo in modo che salga gradualmente e con precisione invece di rimanere al 10% per il 90% delle volte e poi saltare al 100%. Se hai un'animazione di caricamento non percentuale, almeno fallo in modo che esegua il polling del caricamento, in questo modo puoi fermarlo quando il caricamento si interrompe per qualche motivo. Vedo troppi giochi che animano l'animazione di caricamento nel proprio thread e quando il thread di caricamento si interrompe, l'animazione continua felicemente. Quel tipo sconfigge lo scopo dell'animazione di caricamento.
Kaj,

Sono completamente d'accordo. Non penso che sarà fatto bene se salta così.
Il comunista Duck il

2

Su piattaforme iPhone e Android, devi caricare tutte le trame e i suoni. Il caricamento di trame e suoni è molto lento sui vecchi telefoni come iPhone 2G, 3G o G1. Non puoi farlo nel gioco.


2

Come altri hanno già detto, se riesci a caricare tutti i dati di un livello prima di iniziare a riprodurli, avrai prestazioni molto migliori. È una fonte comune di intoppi nel frame time per caricare risorse durante il gioco.

Le cose comuni da fare durante una schermata di caricamento sono un'immagine di sfondo statica, un livello molto semplice, alcuni consigli e trucchi su come giocare, animazioni rapide, ecc.

Ecco la schermata di caricamento per APB. Fighissimo. :) http://www.youtube.com/watch?v=p5STix1t_1E&feature=related

Ecco alcuni pseudo codici per mostrare una barra di avanzamento in una schermata di caricamento:



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, costretto a usare! = Perché ha interrotto il rendering del codice quando ho usato <


1
Wow, le schermate di caricamento APB sembrano davvero fantastiche :)
Bryan Denny,

Se indenti il ​​tuo codice con quattro spazi invece di usare i tag <pre> <code>, sarai in grado di usare <invece di! = Senza interrompere la formattazione.
mmyer

mmyer, sì, ma è un gran dolore nel culo. Perché non c'è solo un tag di codice personalizzato?
Srekel,

1

Le schermate di caricamento possono essere utilizzate per nascondere praticamente qualsiasi cosa; caricamento di risorse, connessioni necessarie (tcp, ecc.), popolamento di mappe con oggetti di gioco e inizializzazione.

Il modo in cui tendo a fare le cose è avere una sorta di gestore delle risorse (o forse un gestore per ogni tipo di risorsa - suoni, grafica, ecc.) E far loro caricare ciò che verrà utilizzato nella memoria. Quindi fai in modo che il tuo gioco estragga i riferimenti dai gestori.

Mostrare una barra di avanzamento, determinare cosa precaricare, ecc. Sembra dipendere dal progetto, dai tempi di caricamento e dai gusti. Le barre di avanzamento sono belle se sono accurate ed è un carico lungo (è bello sapere quanto tempo devi aspettare).

Detto questo, sul mio telefono Android tendo a preferire le app che hanno una propria schermata di caricamento personalizzata, eseguita con gusto. Non ha bisogno di una barra, ma l'animazione indica all'utente i programmi funzionanti. Credo che Android abbia una barra predefinita che puoi usare, il che fa bene il lavoro.

Ecco una domanda SO che potrebbe interessarti.


1

Vale la pena notare che le piattaforme con requisiti di controllo qualità (ad es. X360, PS3, DS, ecc.) Richiederanno tutti di avere qualche forma di animazione nella schermata di caricamento (o di fatto qualsiasi schermata che rimanga statica per più di qualche secondo ).

Questo perché altrimenti l'utente potrebbe pensare che il tuo gioco sia andato in crash, quando in realtà ci vuole solo molto tempo per caricarsi. Anche se questo non è un requisito, lo consiglierei sicuramente.

Qualsiasi forma di animazione va bene, ma una semplice barra di avanzamento potrebbe non essere la migliore, poiché qualsiasi grande passo nel caricamento può far sì che la barra di avanzamento non si muova affatto per un po ', il che significa che lo schermo è altrettanto statico come se ci fosse nessun bar. Meglio mostrare un'immagine in continuo movimento, come un'icona rotante, oltre a un indicatore di avanzamento.


1
Ovviamente, il caricatore si sta caricando in modo asincrono, dovresti essere in grado di sondare i suoi progressi in modo da poter aggiornare in modo più accurato la percentuale. In questo modo il giocatore sa che se si blocca in una percentuale qualcosa è effettivamente sbagliato. Inoltre, come ho detto in altri posti, ti preghiamo di non aggiornare l'animazione senza verificare con il thread di caricamento se è ancora in esecuzione o girerai felicemente mentre il gioco si è effettivamente bloccato.
Kaj

1

Per le schermate di caricamento in Conquest , sono andato con un po 'di descrizione della missione (che tipo di gioco era, oltre a un po' di trama per la missione), e qualche aiuto di base sui comandi.

Sullo sfondo, stavo caricando i suoni. La grafica era tutta caricata su richiesta e sembrava funzionare abbastanza bene per il nostro gioco, ma i suoni erano un orso, quindi ho precaricato tutti i suoni necessari per la missione. Il pulsante Caricamento / Avvio è disabilitato fino a quando non viene caricato tutto, ma non ho alcun tipo di animazione (il che sarebbe una buona cosa da aggiungere).

Questo è il nostro primo gioco, quindi stiamo ancora imparando molto, ma finora ha funzionato bene per noi.

Schermata di caricamento della conquista

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.