Когда я на 7-й день рассказывал о сохранениях в игре, я имел в виду именно визуальный интерфейс. То, что видит пользователь у себя на экране. Я тогда еще не брался непосредственно за сами сохранения. Ну так вот, сохранения должны храниться локально, на устройстве с которого играет человек. У меня пока что нет мощностей для организации серверных хранилищ сохранней в облаке, да и не хочется честно говоря привязывать игроков к доступу в интернет. Мой планшет, например, без Wi-Fi в интернет не выйдет, нет Sim-карты. Поэтому я преследую цель, что бы играть можно было везде и всегда.
Собственно, что это значит? Мне нужно, что бы игра сохраняла какие-то свои файлы на устройстве. Я обычно стараюсь делать это там же, где находится и сама программа. Когда я писал программу для Windows и Mac OS, я нашел функцию, которая одинаково срабатывает на обоих системах:
ExtractFilePath(ParamStr(0))
Если ваша программа находится на диск D в какой-то папке, то эта функция находит полный путь к программе и используется мной в моих целях. На Android эта функция возвращает пустоту. Самое интересно, что именно пустоту. Программа не выдает ошибку, она продолжает работать, но адрес папки я получить не могу. Я нашел другую функцию, которая работает на Android идеально:
TPath.GetPublicPath
Она полностью возвращает адрес папки, и я могу сохранять файлы там же где и лежит игра. Но вот, например, на Windows эта функция всегда возвращает один и тот же адрес. Где бы моя игра не находилась, в ответ я получаю - C:\ProgramData.
И тут у меня возникает вопрос - или я не нашел универсальное решение, которое одинаково хорошо бы работало и на Windows и на Mac OS и на Android, или все же написать одно приложение под все операционные системы не так-то просто. И это я еще не знаю, как эти же функции будут вести себя на iOS. У меня просто нет под рукой iPhon-а что бы проверить.
Самое забавное, что я знаю, как объединить эти две функции в одной программе, что бы они не конфликтовали и выдавали нужные результат в зависимости от операционной системы, но лично я считаю, и у меня есть такое ощущение, что я прав. Данное решение, которое я знаю, это так называем "костыль". Это как перематывать синей изолентой что-то сломанное...