Я делаю то, что составляет редактор уровней для игры, и я не уверен, что лучший способ сохранить игровой контент в виде файла. Чтобы быть понятным, это вопрос дизайна, а не технический.Что такое хорошая структура для файлов, отредактированных параллельно несколькими людьми
Содержание игры может быть разбито иерархически на несколько уровней, каждый с несколькими сценами, которые имеют несколько событий и т. Д., Каждый из которых относительно независим. Однако есть также данные, такие как элементы и символы, которые будут называться глобально по всей игре.
В идеале этот редактор будет поддерживать нескольких пользователей, каждый из которых может редактировать неконфликтные части содержимого игры, а затем объединять изменения без проблем (подумайте об исходном коде в системе управления версиями). В идеале, игровой контент также должен быть легко загружен в игру после завершения (т. Е. Я должен иметь возможность загрузить «уровень» и объединить все необходимые куски без навигации по файловой системе).
Я придумал несколько идей о том, как я мог бы сделать это, ни один из которых не являются полностью удовлетворительными:
Split содержание игры во многих файлах, так что параллельные редактирует легко сделать и слияние. Используйте структуру папок и файл проекта, чтобы отслеживать файлы, что-то вроде того, как Visual Studio обрабатывает проекты кода. Недостатки в том, что в игре сложнее управлять, и контент более сложно ссылаться на другой контент в другом файле (например, персонаж, у которого есть элемент).
Используйте один двоичный файл, но создайте функцию слияния, аналогичную тому, что делает MS Word (или как git объединяет текстовые файлы). Недостатком является то, что это означает, что вам необходимо вручную разрешить все конфликты слияния, и функциональность слияния, скорее всего, будет нецелесообразной для реализации.
Используйте только несколько файлов для представления больших фрагментов игры и надейтесь, что люди, использующие редактор, достаточно умны, чтобы одновременно не редактировать один и тот же. Сознания очевидны, но это было бы намного проще реализовать.
Очевидно, что у меня есть проблема, но, надеюсь, я дал достаточно информации, чтобы люди знали, о чем я говорю. У кого-нибудь есть полезная информация или у кого-то была аналогичная проблема?
Если это помогает, это, скорее всего, файлы .json, с версией git.