2016-03-15 7 views
1

Благодаря этому замечательному сообществу мне удалось создать систему сохранения для моей игры! Тем не менее, это довольно долго и мучительно писать. Мне нужна помощь в том, как (если возможно) сделать это немного короче и проще.Более короткий, более простой и эффективный способ сохранения данных?

Итак, это то, что я получил (в этом примере используется ТОЛЬКО 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 

Любой, у кого есть лучший способ или идея о том, как с этим бороться?

+0

Использовать 'GameState' таблицу как ваш полный мир для запуска кода игры? Вместо отдельных глобальных переменных? –

+0

Извините, я не уверен, что полностью понимаю, что вы предлагаете мне ... – FICHEKK

+0

У вас есть N глобальных переменных для вашего состояния. Ваша проблема в том, что вам нужно набивать их в таблице, чтобы сохранить их, а затем вытащить их, чтобы загрузить их. Если вы перестанете использовать глобальные переменные N и используете 1 глобальную переменную (сама таблица), вы можете напрямую загрузить и сохранить ее, и вы просто используете 'GameState.TotalPixoosGS',' GameState.PixoosQuantityGS' и т. Д. В своей игре, а не просто ' TotalPixoosGS' и 'PixoosQuantityGS'. –

ответ

2

Проблема заключается в том, что вы храните данные в независимых глобальных переменных, которые необходимо сохранить в таблице для сохранения, а затем извлечь из таблицы для загрузки.

Вы можете избежать необходимости делать все это, если используете только таблицу как глобальную переменную в своем общем коде.

Поэтому вместо того, чтобы писать код, который использует TotalPixoosGS или PixoosQuantityGS при проверке значений/etc. вы пишете код, который вместо этого использует GameState.TotalPixoosGS и GameState.PixoosQuantityGS, а затем просто сохраняет и загружает непосредственно из/в глобальную таблицу GameState.

+0

Это сработало отлично! Мне нужно было изменить каждую переменную в игре, добавив префикс 'GameState.', но мне удалось заставить его работать благодаря вам, сэр! – FICHEKK

Смежные вопросы