Как создать / заполнить папки (визуальные каталоги) с сохранениями не зависящим от платформы образом? - PullRequest
1 голос
/ 24 июля 2011

Эй, мне интересно, как мультиплатформенные игры, такие как minecraft, способны создавать каталоги , которые видны как папки и такие , где они могут хранитьсяСохраняет или другие ресурсы?

Если вы знаете, как это сделать с помощью Boost :: Filesystem, ответьте на эту запись.

Ответы [ 2 ]

3 голосов
/ 24 июля 2011

В случае Minecraft это на Java, который абстрагирует обработку файловой системы, так что вызов чего-то вроде CreateDirectory () будет работать на любой ОС без необходимости переписывать вызов основной функции. Это связано с тем, что Java работает поверх виртуальной машины (JVM), а JVM обрабатывает специфические вызовы ОС для работы с файловой системой. Таково преимущество Java. Большинство интерпретируемых языков (а также языки, соблюдаемые Just In Time) работают таким образом, поскольку они могут абстрагировать определенные команды ОС для файловой системы от программиста.

Тем не менее, с чем-то вроде C ++, который соответствует определенной архитектуре, проблема более сложная. Каждая ОС может иметь свой набор функций для обработки файлов и каталогов, а для игр, портированных на другую платформу, это часто одна из вещей, которая изменяется при работе с портом. В этом случае полезны такие библиотеки, как Boost, поскольку они допускают такую ​​же абстракцию, что и некоторые другие языки. Если игра не использует Boost, то часто программист все равно пишет какую-то библиотеку, обычно по причинам повторного использования и читабельности.

2 голосов
/ 25 июля 2011

Это не так сложно, как вы думаете. В C или C ++ до тех пор, пока вы не пользуетесь консолями, существует ровно два набора функций, с которыми вам нужно иметь дело: функции Windows и функции POSIX. И большинство функций POSIX также существуют в Windows. Несколько # ifdef и у вас есть хороший минимальный уровень кроссплатформенной файловой системы.

Если вы хотите сделать это проще, используйте Boost :: Filesystem.

Если вы не используете C или C ++, скорее всего, ваши языки программирования предоставляют эти абстракции изначально.

Если вы хотите охватить и консоли, вы в конечном итоге получите еще один набор API для каждой консоли. Все, что на самом деле означает, это немного больше # ifdef'ing для консолей, или если вы используете язык без надлежащих привязок для этой консоли, пишите эти привязки.

...