Благодаря этому замечательному сообществу мне удалось создать систему сохранения для моей игры! Тем не менее, это довольно долго и мучительно писать. Мне нужна помощь в том, как (если возможно) сделать это немного короче и проще.Более короткий, более простой и эффективный способ сохранения данных?
Итак, это то, что я получил (в этом примере используется ТОЛЬКО 1 переменную, чтобы получить идею):
GameState = loadsave.loadTable("GameState.json")
if GameState == nil then
GameState = {
TotalPixoosGS = 0,
}
loadsave.saveTable(GameState, "GameState.json")
end
TotalPixoos = GameState.TotalPixoosGS
Позвольте мне быстро объяснить, что я здесь: GameState = loadsave.loadTable("GameState.json")
это объявление таблицы из файла .json , Я использовал .loadTable функции, которую я получил здесь:
https://code.coronalabs.com/code/easy-saveload-table-data-corona-sdk
if GameState == nil then
GameState = {
TotalPixoosGS = 0,
}
Если файл не существует, он просто создает игровые настройки по умолчанию, в этом случае устанавливает TotalPixoosGS
переменных значения 0
.
loadsave.saveTable(GameState, "GameState.json")
Снова функция от указанной выше ссылке, которая просто создает .json файл из GameState
таблицы, называет его GameState.json
.
TotalPixoos = GameState.TotalPixoosGS
Наконец, присваивает значение GameState.TotalPixoosGS
к нашей переменной TotalPixoos
(если GameState.json
не существует, он будет присвоить значение 0
). До сих пор довольно прямолинейно, не так ли?
Теперь этот код был вызван ОТКРЫТИЕ приложения.
Следующий код является то, что я использую при выходе из приложения:
if (event.type == "applicationExit") then
GameState = {
TotalPixoosGS = TotalPixoos,
}
loadsave.saveTable(GameState, "GameState.json")
end
В принципе, то, что это делает: Когда приложение собирается выйти, вы просто изменить значение TotalPixoosGS
нашей текущей стоимости TotalPixoos
(то есть переменная, которая изменяется со временем). Наконец, мы сохраняем таблицу GameState
с новым, измененным TotalPixoosGS
.
Как только приложение запустится снова, процесс повторится.
В чем проблема? Ну, когда у вас есть 1 переменная, как в этом случае, она выглядит просто. Однако, когда вам нужно управлять более чем 50 переменными, может быть больно писать. Есть ли способ сократить это?
Во всяком случае, это всего лишь небольшой фрагмент кода, чтобы получить идею:
GameState = loadsave.loadTable("GameState.json")
if GameState == nil then
GameState = {
TotalPixoosGS = 0,
PixoosQuantityGS = 0,
PixoosPerSecondGS = 0,
BottlesQuantityGS = 0,
MaxBottlesFoundGS = 0,
BottlesPriceGS = 0.005,
WillFindBottlesChanceGS = 10,
CanFindBottlesGS = 0,
MaxClickableGS = 5,
MaxTrashCanValueGS = 5,
}
loadsave.saveTable(GameState, "GameState.json")
end
TotalPixoos = GameState.TotalPixoosGS
PixoosQuantity = GameState.PixoosQuantityGS
PixoosPerSecond = GameState.PixoosPerSecondGS
BottlesQuantity = GameState.BottlesQuantityGS
MaxBottlesFound = GameState.MaxBottlesFoundGS
BottlesPrice = GameState.BottlesPriceGS
WillFindBottlesChance = GameState.WillFindBottlesChanceGS
CanFindBottles = GameState.CanFindBottlesGS
MaxClickable = GameState.MaxClickableGS
MaxTrashCanValue = GameState.MaxTrashCanValueGS
посмотреть, сколько уродливых кода есть? И это на выходе:
if (event.type == "applicationExit") then
GameState = {
TotalPixoosGS = TotalPixoos,
PixoosQuantityGS = PixoosQuantity,
PixoosPerSecondGS = PixoosPerSecond,
BottlesQuantityGS = BottlesQuantity,
MaxBottlesFoundGS = MaxBottlesFound,
BottlesPriceGS = BottlesPrice,
WillFindBottlesChanceGS = WillFindBottlesChance,
CanFindBottlesGS = CanFindBottles,
MaxClickableGS = MaxClickable,
MaxTrashCanValueGS = MaxTrashCanValue,
}
loadsave.saveTable(GameState, "GameState.json")
end
Любой, у кого есть лучший способ или идея о том, как с этим бороться?
Использовать 'GameState' таблицу как ваш полный мир для запуска кода игры? Вместо отдельных глобальных переменных? –
Извините, я не уверен, что полностью понимаю, что вы предлагаете мне ... – FICHEKK
У вас есть N глобальных переменных для вашего состояния. Ваша проблема в том, что вам нужно набивать их в таблице, чтобы сохранить их, а затем вытащить их, чтобы загрузить их. Если вы перестанете использовать глобальные переменные N и используете 1 глобальную переменную (сама таблица), вы можете напрямую загрузить и сохранить ее, и вы просто используете 'GameState.TotalPixoosGS',' GameState.PixoosQuantityGS' и т. Д. В своей игре, а не просто ' TotalPixoosGS' и 'PixoosQuantityGS'. –