Що робити для користувацьких ігрових двигунів, що робити, якщо основні дані неправильно сформовані чи відсутні?


27

Я пишу користувальницький движок для гри. Я почав цю гру заздалегідь, перш ніж зрозумів, чому я повинен використовувати проміжне програмне забезпечення, і це занадто далеко для переписування.

Переважна більшість моїх даних надходять із зовнішніх файлів, і я не кажу лише про активи; Я визначаю всі свої ігрові об’єкти через .JSON. Але, на жаль, я людина; Іноді мої файли даних недійсні, або я змінюю формат, але забуваю оновити файл, або сам завантажувач виявляється помилковим.

Якщо з будь-якої причини спроба завантажити якусь форму активу у користувацькому двигуні не вдасться, то які варіанти я маю?

Це не дублікат програми Як мені поводитися з відсутніми ресурсами? , оскільки це питання стосується користувачів, орієнтованих на користувачів, таких як моделі чи текстури. Погані текстури можна замінити контрольною дошкою, погані звуки - тишею, а поганий текст - "ПОМИЛКА". Моя проблема полягає в важливих для навіть гри запущених даних, таких як рівні, визначення об’єкта гри та макети графічного інтерфейсу.


7
Я використовую подібний підхід для своєї гри. Насправді я створив невеликий утилітний додаток, щоб генерувати свої файли даних ігор, щоб уникнути помилок людини - таким чином я можу просто змінити файли, якщо хочу внести зміни без необхідності писати 100000 рядків JSON вручну.
JDSweetBeat

Ви також можете запустити свої дані через валідатор перед завантаженням.
JDSweetBeat

Мій JSON досить малий, що автоматичне його створення було б марним. Крім того, валідатор не допоможе, якщо JSON відсутній, або в тій речі, яка повинна його прочитати, є помилка. Дякую за думку.
JesseTG

Відповіді:


44

Введіть помилку і витончено вийдіть.

В ідеалі також відображати читальну помилку людини на екрані. Повинно бути основний конвеєр жорсткої кодованої функціональності, який працює без цих файлів даних. Це той самий конвеєр, який завантажує файли даних в першу чергу. Він повинен бути здатний визначати, коли ці основні файли даних пошкоджені або іншим чином несправні, і закінчити програму. Якщо користувачі мають намір змінювати ці файли, нічого іншого зробити неможливо. В іншому випадку вам потрібно впровадити стратегію тестування, щоб уникнути подібних пошкоджень. Тоді ви можете переконатися, що ви випускаєте лише дійсні файли даних.


12

Байт56 згадав про один варіант. Є принаймні один інший:

Припустимо значення за замовчуванням і відобразить попередження.

Залежно від характеру ваших даних, може бути цілком прийнятним припустити деякі значення за замовчуванням і попередити користувача про те, що "оскільки файл xxx не вдалося завантажити, ми використовуємо загальний yyy об'єкт".


6

Це залежить від того, відбувається це під час розробки чи випуску.

Під час розробки у вас будуть постійно, постійно, постійно, постійно постійно виникати речі, помилки та безладдя, і ви навіть можете хотіти "гаряче" завантажувати активи на вимогу або замінювати актив під час гри. Ви можете редагувати сценарії з запущеною грою, щоб перевірити, чи AI ефективніше, або щось подібне.

Це дратує найбільше , якщо програма показує діалогове вікно з повідомленням про помилку і завершує свою роботу кожен раз, і ви повинні перезапустити його , який займає 2-3 хвилини. Мета в розвитку - якомога менше зупинити вас (час яких є найціннішим надбанням).
Так, якщо, наприклад, текстура відсутня, ви хотіли б побачити щось на зразок червоно-білої шашки, можливо, слово "пропущене" написано поверх неї як заміна текстури, тому відразу очевидно, що щось не дивно . Але ви не хочете, щоб гра виходила витончено, а то й не врізалася. Детальна інформація про те, чого не вистачає у вашому лог-файлі, надзвичайно корисна.

З іншого боку, у випуску повний набір файлів активів в ідеалі [1] повинен пройти ваш автоматизований конвеєр активів. Це повинно бути не набагато більше, ніж простий аналізатор, який читає всі ваші JSON, а потім перехресно перевіряє, чи відповідає кожен модуль сам по собі, і перевіряє, що кожен актив, на який ви посилаєтесь, є насправді, а потім зберігає цілу купу файлів вгору деяким відомим (але не обов’язково стандартним) способом, який легко прочитає ваш двигун, необов'язково додавши кілька контрольних сум.

Ви знаєте, що не може бути збоїв, оскільки ваш конвеєр перевірив, чи все там було, перш ніж ви випустили пакет кінцевому користувачеві. Отже, якщо трапляється збій, або сталася помилка передачі, або більш ймовірно, що користувач намагається обдурити. У будь-якому випадку програма повинна відображати повідомлення про те, що файли активів пошкоджені та вийти.

Крім того, ви можете запропонувати можливість завантажити незайману копію активів з Інтернету (якщо у вас є сервер завантаження). Але щоб уникнути кошмару підтримки клієнтів, обов'язково запитайте перед завантаженням гігабайт даних.


[1] Реальність може виглядати інакше, ви можете навіть знайти відсутні ресурси в назвах AAA, виробники яких "повинні знати", але вони, як правило, мають нереальні терміни і великі, що змінюються команди теж. В ідеалі все, що ви постачаєте, пройшло через автоматизований трубопровід і гарантовано буде завершеним.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.