Per i motori di gioco personalizzati, cosa devo fare se i miei dati principali sono malformati o mancanti?


27

Sto scrivendo un motore personalizzato per un gioco. Ho iniziato questo gioco molto prima di capire perché dovrei usare il middleware, ed è troppo lungo per riscriverlo.

La stragrande maggioranza dei miei dati proviene da file esterni e non mi riferisco solo alle risorse; Definisco tutti i miei oggetti di gioco tramite .JSON. Ma, ahimè, sono umano; di tanto in tanto i miei file di dati non sono validi oppure cambio il formato ma dimentico di aggiornare il file o il caricatore stesso è completamente difettoso.

Se, per qualsiasi motivo, un tentativo di caricare una qualche forma di risorsa in un motore personalizzato fallisce, quali opzioni ho?

Questo non è un duplicato di Come devo gestire le risorse mancanti? , poiché questa domanda riguarda risorse rivolte all'utente come modelli o trame. Le trame cattive possono essere sostituite con una scacchiera, suoni cattivi con silenzio e testo cattivo con "ERRORE". Il mio problema risiede nei dati che sono fondamentali per il gioco anche in esecuzione, come livelli, definizioni degli oggetti di gioco e layout della GUI.


7
Uso un approccio simile per il mio gioco. In realtà ho creato una piccola app di utilità per generare i miei file di dati di gioco per evitare errori umani - in questo modo posso solo modificare i file se voglio apportare modifiche senza dover scrivere manualmente 100.000 righe di JSON.
JDSweetBeat

È inoltre possibile eseguire i dati tramite un validatore prima di caricarli.
JDSweetBeat

Il mio JSON è abbastanza piccolo che generarlo automaticamente sarebbe inutile. Inoltre, un validatore non aiuta se manca JSON o c'è un bug nella cosa che dovrebbe leggerlo. Grazie per il pensiero, però.
JesseTG

Risposte:


44

Registra un errore ed esce con grazia.

Idealmente, visualizza anche un errore leggibile sullo schermo. Dovrebbe esserci una pipeline di base di funzionalità hard coded che funziona senza questi file di dati. È la stessa pipeline che carica i file di dati in primo luogo. Dovrebbe essere in grado di rilevare quando questi file di dati principali sono corrotti o altrimenti difettosi e terminare l'applicazione. Se gli utenti intendono modificare questi file, non c'è molto altro da fare. Altrimenti, è necessario implementare una strategia di test per garantire che questo tipo di corruzione non accada. Quindi puoi assicurarti di rilasciare solo file di dati validi.


12

Byte56 ha menzionato un'opzione. Ce n'è almeno un altro:

Assumi valori predefiniti e visualizza un avviso.

A seconda della natura dei dati, potrebbe essere perfettamente accettabile assumere alcuni valori predefiniti e avvertire l'utente che "poiché il file xxx non è stato caricato, stiamo utilizzando un oggetto yyy generico".


6

Dipende se ciò accade durante lo sviluppo o il rilascio.

Durante lo sviluppo, ti mancheranno continuamente tutti i tipi di cose, errori e errori, costantemente, e potresti anche voler caricare "a caldo" gli asset su richiesta o sostituire un asset mentre il gioco è in esecuzione. È possibile modificare gli script mentre il gioco è in esecuzione per testare un'intelligenza artificiale con prestazioni migliori o simili.

È molto fastidioso se il programma mostra una finestra di dialogo di errore ed esce ogni volta, ed è necessario riavviarlo che richiede 2-3 minuti. L'obiettivo dello sviluppo è quello di bloccarti (il cui tempo è la risorsa più preziosa) il meno possibile.
Quindi, se per esempio manca una trama, vorresti vedere qualcosa come una scacchiera rosso-bianca, forse con la parola "mancante" scritta sopra di essa come una trama sostitutiva, quindi è immediatamente ovvio che qualcosa è strano . Ma non vuoi che il gioco esca con garbo, né si blocchi. Le informazioni dettagliate su ciò che manca nel file di registro sono estremamente utili.

D'altra parte, in una versione, il set completo di file di risorse dovrebbe idealmente [1] passare attraverso la pipeline di risorse automatizzata. Questo non deve essere molto più di un semplice parser che legge in tutti i tuoi JSON e quindi verifica incrociamente che ogni modulo sia coerente in sé e verifica che ogni risorsa a cui fai riferimento sia effettivamente lì, quindi comprime l'intero gruppo di file in un modo noto (ma non necessariamente standard) facile da leggere per il tuo motore, aggiungendo eventualmente alcuni checksum.

Si sa che non ci può essere il fallimento perché il gasdotto controllato che tutto era lì prima di rilasciato il pacchetto per l'utente finale. Quindi, se si verifica un errore, si è verificato un errore di trasmissione o, più probabilmente, l'utente sta cercando di imbrogliare. In entrambi i casi, il programma dovrebbe visualizzare un messaggio in cui si dice che i file delle risorse sono danneggiati e uscire.

In alternativa, potresti offrire la possibilità di scaricare una copia originale delle risorse da Internet (se disponi di un server di download). Ma per evitare un incubo di assistenza clienti, assicurati di chiedere prima di scaricare gigabyte di dati.


[1] La realtà potrebbe apparire diversa, potresti persino trovare risorse mancanti nei titoli AAA i cui produttori "dovrebbero sapere", ma di solito hanno scadenze non realistiche e anche grandi team che cambiano. Idealmente tutto ciò che spedisci è passato attraverso la pipeline automatizzata ed è garantito per essere completo.

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.