Что я должен делать для пользовательских игровых движков, если мои основные данные искажены или отсутствуют?

27

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

Подавляющее большинство моих данных поступает из внешних файлов, и я не просто ссылаюсь на активы; Я определяю все мои игровые объекты через .JSON. Но, увы, я человек; иногда мои файлы данных недействительны, или я изменяю формат, но забываю обновить файл, или сам загрузчик глючит.

Если по какой-либо причине попытка загрузить какой-либо актив в пользовательский движок не удалась, какие варианты у меня есть?

Это не дубликат Как я должен обрабатывать недостающие ресурсы? , поскольку этот вопрос касается пользовательских ресурсов, таких как модели или текстуры. Плохие текстуры можно заменить шахматной доской, плохие звуки - тишиной, а плохой текст - «ОШИБКА». Моя проблема связана с данными, которые важны для игры, даже когда она запущена, такими как уровни, определения игровых объектов и макеты графического интерфейса.

JesseTG
источник
7
Я использую подобный подход для моей игры. Я на самом деле создал небольшое служебное приложение для генерации файлов с данными игры, чтобы избежать человеческих ошибок - таким образом, я могу просто изменить файлы, если я хочу внести изменения без необходимости писать 100 000 строк JSON вручную.
JDSweetBeat
Вы также можете запустить ваши данные через валидатор перед загрузкой.
JDSweetBeat
Мой JSON достаточно мал, чтобы автоматически генерировать его было бы бесполезно. Кроме того, валидатор не поможет, если отсутствует JSON, или есть ошибка в том, что должно его прочитать. Спасибо за мысль, хотя.
JesseTG

Ответы:

44

Зарегистрируйте ошибку и изящно выйдите.

В идеале, отображать читабельную ошибку на экране. Должен быть основной конвейер с жестко закодированными функциями, который работает без этих файлов данных. Это тот же конвейер, который загружает файлы данных в первую очередь. Он должен быть в состоянии обнаружить, когда эти файлы основных данных повреждены или иным образом неисправны, и завершить работу приложения. Если пользователи намерены изменить эти файлы, больше ничего не поделаешь. В противном случае вам необходимо внедрить стратегию тестирования, чтобы избежать подобных повреждений. Тогда вы можете быть уверены, что выпускаете только действительные файлы данных.

MichaelHouse
источник
12

Byte56 упомянул один вариант. Есть как минимум еще один:

Примите значения по умолчанию и отобразите предупреждение.

В зависимости от характера ваших данных может быть вполне приемлемо принять некоторые значения по умолчанию и предупредить пользователя о том, что «поскольку файл xxx не удалось загрузить, мы используем универсальный объект yyy».

Осьминог
источник
6

Это зависит от того, происходит ли это во время разработки или выпуска.

Во время разработки у вас будут постоянно отсутствовать различные вещи, ошибки и ошибки, постоянно и постоянно, и вы даже можете захотеть «горячо» загружать ресурсы по требованию или заменять ресурс во время игры. Вы можете редактировать сценарии с запущенной игрой, чтобы проверить, работает ли AI лучше, или что-нибудь подобное.

Это очень раздражает, если программа показывает диалоговое окно с ошибкой и каждый раз завершает работу, и вы должны перезапустить его, что занимает 2-3 минуты. Цель в развитии - остановить вас (чье время является самым ценным активом) как можно меньше.
Так, если, например, текстура отсутствует, вы хотели бы видеть что-то вроде красно-белой шахматной доски, возможно, со словом «отсутствует», написанной поверх нее, в качестве замены текстуры, так что сразу становится очевидным, что что-то странное , Но вы не хотите, чтобы игра выходила изящно и даже не вылетала. Подробная информация о том, что отсутствует в вашем лог-файле, очень полезна.

С другой стороны, в пресс - релизе, полный набор файлов активов в идеале должны [1] пошли через автоматизированный трубопровод активов. Это должно быть не больше, чем простой синтаксический анализатор, который читает все ваши JSON-файлы, а затем перекрестно проверяет, что каждый модуль является согласованным сам по себе, и проверяет, что каждый актив, на который вы ссылаетесь, действительно существует, а затем архивирует всю группу файлов. каким-то известным (но не обязательно стандартным) способом, который легко читается вашим движком, при желании добавляя несколько контрольных сумм.

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

В качестве альтернативы вы можете предложить вариант загрузки первичной копии ресурсов из Интернета (если у вас есть сервер загрузки). Но чтобы избежать кошмара поддержки клиентов, обязательно спросите об этом перед загрузкой гигабайт данных.


[1] Реальность может выглядеть по-другому, вы даже можете найти недостающие активы на титулах ААА, создатели которых «должны знать», но обычно у них нереальные сроки и большие, меняющиеся команды. В идеале все, что вы отправляете, прошло через автоматизированный конвейер и гарантированно будет выполнено.

Damon
источник