Як мені поводитися з відсутніми ресурсами?


13

Ваша гра очікує завантаження певного активу, але він не знайдений. Як слід вирішувати ситуацію? Наприклад:

Texture* grassTexture = LoadTexture("Grass.png"); // returns NULL; texture not found
Mesh* car             = LoadMesh("Car.obj");      // returns NULL; 3D mesh not found

Користувач може бути випадково видалений, зіпсований або неправильно написаний під час розробки.

Деякі можливі відповіді:

  • Твердження (в ідеалі лише під час розвитку)
  • Вихід із гри витончено
  • Киньте виняток і спробуйте впоратися з ним.

Який спосіб найкращий?


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

@Sidar Мені подобається те, що ти сказав більше, ніж відповідь, яка найбільше проголосувала, можливо, ти можеш пояснити краще, що ти намагаєшся сказати
concept3d

Потворність помилок полягає в тому, що іноді вона просто порушує гру, і люди не можуть її грати / запускати. Наприклад, в Steam, якщо ваша гра не працює належним чином, ви можете перевірити її дані. Коли щось здається пошкодженим / відсутнім / зміненим, Steam автоматично завантажить ці файли. Я не знаю точно, як вони це роблять. Але вони, очевидно, перевіряють це на деяких даних. Можливо, хеш-коди? Я насправді не знаю. Але у вас завжди повинен бути стандартний актив заміни (просто текстура, яка говорить про "помилку" на ньому чи щось)
Сидар

@Sidar чому б не відформатувати його у відповідь?
concept3d

Тому що я не знаю точно, як це працює, і не хочу, щоб дезінформувати про це. Тож я не міг дати тобі належної відповіді.
Сидар

Відповіді:


19

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


Повністю згоден з цією публікацією. Можливо, ви хочете робити різні речі у версії / розподіленій збірці, однак.
Йонкель

Для версій версій можна подумати про схвалення для перевірки наявних файлів за допомогою хешування для завантаження відсутніх або недійсних файлів. Однак під час розробки, безумовно, найкраще відобразити чорну та пурпурову текстуру шахівниці, щоб привернути вашу увагу. Для моделей можна використовувати величезну модель ПОМИЛКИ, яка повинна бути очевидною.
Крістіан Івічевич

Це має сенс для текстур. не так багато для 3D-моделей. Що робити, якщо більшості 3D-моделей не було? Гра буде виглядати кумедно, в той час як вона повинна бути відтворена в першу чергу. Що робити, якщо ви обчислите свою структуру просторових даних на основі геометричних властивостей 3D-моделей, що має відбутися. Я з цим лише за простих обставин, як відсутні текстури. Але я вважаю, що перевірка повноти даних - лише кращий підхід для комерційних ігор.
concept3d

1
@ concept3d - Я знаю, що принаймні у двигуна Source є велика, очевидна сітка помилок (я її періодично бачив у тестовому клієнті Dota 2, ще коли вони додавали героїв). Я погоджуюся, що якщо відсутні великі частоти даних про рівень, мабуть, найкраще просто помилитися, особливо у складанні релізів, але для цілей налагодження, що мають великий знак питання, що танцює навколо, не надто погано.
Роберт Фрейзер

6

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

Texture* grassTexture;
try {
    grassTexture = LoadTexture("Grass.png");
} catch (WhateverExcaption e) {
    grassTexture = LoadTexture("Grass_512.png");
}

Якщо навіть це не вдасться, можливо, настав час порятунку.


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