W przypadku niestandardowych silników gier, co powinienem zrobić, jeśli moje podstawowe dane są zniekształcone lub brakuje ich?


27

Piszę niestandardowy silnik do gry. Zacząłem tę grę na długo, zanim zrozumiałem, dlaczego powinienem używać oprogramowania pośredniego, a jest zbyt daleko, aby przepisać.

Zdecydowana większość moich danych pochodzi z plików zewnętrznych i nie odnoszę się tylko do zasobów; Wszystkie moje obiekty gry definiuję za pomocą .JSON. Ale niestety jestem człowiekiem; czasami moje pliki danych są nieprawidłowe lub zmieniam format, ale zapominam o aktualizacji pliku lub sam moduł ładujący jest całkowicie wadliwy.

Jeśli z jakiegoś powodu próba załadowania jakiegoś zasobu do niestandardowego silnika nie powiedzie się, jakie mam opcje?

To nie jest duplikat tego, jak sobie radzić z brakującymi zasobami? , ponieważ to pytanie dotyczy zasobów użytkownika, takich jak modele lub tekstury. Złe tekstury można zastąpić szachownicą, złe dźwięki z ciszą, a zły tekst z „ERROR”. Mój problem dotyczy danych, które są kluczowe dla nawet działającej gry, takich jak poziomy, definicje obiektów gry i układy GUI.


7
W mojej grze stosuję podobne podejście. Zbudowałem małą aplikację narzędziową do generowania plików danych gry, aby uniknąć błędów ludzkich - w ten sposób mogę po prostu zmodyfikować pliki, jeśli chcę wprowadzić zmiany bez konieczności ręcznego pisania 100 000 wierszy JSON.
JDSweetBeat

Możesz także uruchomić swoje dane za pomocą walidatora przed załadowaniem go.
JDSweetBeat

Mój JSON jest na tyle mały, że jego automatyczne wygenerowanie byłoby bezużyteczne. Ponadto moduł sprawdzania poprawności nie pomoże, jeśli brakuje JSON lub występuje błąd w rzeczy, która powinna go odczytać. Ale dziękuję za tę myśl.
JesseTG

Odpowiedzi:


44

Zaloguj błąd i z wdziękiem wyjdź.

Najlepiej, aby wyświetlał również błąd czytelny dla człowieka. Powinien istnieć szereg podstawowych funkcji zakodowanych na stałe, które działają bez tych plików danych. To ten sam potok, który w pierwszej kolejności ładuje pliki danych. Powinien być w stanie wykryć, kiedy te podstawowe pliki danych są uszkodzone lub w inny sposób wadliwe, i zakończyć aplikację. Jeśli użytkownicy zamierzają zmodyfikować te pliki, niewiele można zrobić. W przeciwnym razie musisz wdrożyć strategię testowania, aby upewnić się, że tego rodzaju uszkodzenia nie wystąpią. Następnie możesz upewnić się, że publikujesz tylko prawidłowe pliki danych.


12

Byte56 wspomniał o jednej opcji. Jest co najmniej jeden inny:

Załóż wartości domyślne i wyświetl Ostrzeżenie.

W zależności od charakteru twoich danych może być całkowicie akceptowalne przyjęcie pewnych wartości domyślnych i ostrzeżenie użytkownika, że ​​„ponieważ plik xxx nie został załadowany, używamy ogólnego obiektu yyy”.


6

Zależy to od tego, czy dzieje się to w fazie rozwoju czy wydania.

Podczas opracowywania będziesz mieć wiele brakujących rzeczy, błędów i bałaganów, stale, cały czas, a nawet możesz chcieć „ładować” zasoby na żądanie lub wymieniać zasób podczas działania gry. Możesz edytować skrypty z uruchomioną grą, aby sprawdzić, czy AI działa lepiej lub cokolwiek podobnego.

Jest to najbardziej irytujące jeśli zaprogramować pokazuje komunikat o błędzie i wychodzi za każdym razem, i trzeba go ponownie uruchomić, które trwa 2-3 minut. Celem rozwoju jest zatrzymanie cię (którego czas jest najcenniejszym zasobem) jak najmniej.
Tak więc, jeśli na przykład brakuje tekstury, chciałbyś zobaczyć coś w rodzaju czerwono-białej szachownicy, być może ze słowem „brak” zapisanym na niej jako teksturą zastępczą, więc od razu widać, że coś jest dziwne . Ale nie chcesz, aby gra zakończyła się z gracją, a nawet nie uległa awarii. Niezwykle pomocne są szczegółowe informacje o tym, czego brakuje w pliku dziennika.

Z drugiej strony w wydaniu pełny zestaw plików zasobów powinien idealnie [1] przejść przez zautomatyzowany potok zasobów. To nie może być niczym więcej niż zwykłym parserem, który wczytuje wszystkie JSON-y, a następnie sprawdza, czy każdy moduł jest spójny sam w sobie, i sprawdza, czy każdy zasób, do którego się odwołujesz, rzeczywiście istnieje, a następnie zamyka całą wiązkę plików w jakiś znany (ale niekoniecznie standardowy) sposób, który jest łatwy do odczytania przez silnik, opcjonalnie dodając kilka sum kontrolnych.

Ty wiesz, że nie może być mowy, ponieważ awaria rurociągu sprawdzeniu, że wszystko było tam zanim wydała pakiet dla użytkownika końcowego. Jeśli więc nastąpi awaria, wystąpił błąd transmisji lub istnieje większe prawdopodobieństwo, że użytkownik próbuje oszukać. W obu przypadkach program powinien wyświetlić komunikat informujący o uszkodzeniu plików zasobów i wyjść.

Alternatywnie możesz zaoferować opcję pobrania nieskazitelnej kopii zasobów z Internetu (jeśli masz serwer pobierania). Ale aby uniknąć koszmaru obsługi klienta, pamiętaj, aby zapytać przed pobraniem gigabajtów danych.


[1] Rzeczywistość może wyglądać inaczej, możesz nawet znaleźć brakujące zasoby w tytułach AAA, których twórcy „powinni wiedzieć”, ale zwykle mają nierealistyczne terminy i duże, zmieniające się zespoły. Idealnie wszystko, co wysyłasz, przeszło przez automatyczny rurociąg i jest gwarantowane, że jest kompletne.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.