Playdateではゲーム内データをjsonとして保存したり、読み込みしたりすることが可能です。
前回のHPとEXPを変更するプロジェクトを改造します。
まず、前回のmenu.lua
を変更します。
-- 略 --
function Menu:init(_hp, _exp)
Menu.super.init(self)
if _hp == nil then
_hp = 50
end
if _exp == nil then
_exp = 5
end
hp = _hp
exp = _exp
self:draw()
end
function Menu:getData()
return hp, exp
end
-- 略 --
Menuインスタンス生成時にinit
の引数にhp
,exp
代入できるようにします。
また、hp
とexp
を返すgetData
関数を用意します。
次に前回のmain.lua
を編集します。
-- 略 --
local menu = nil
local FILE_NAME <const> = "save_data" -- 保存ファイル名(.jsonファイル
local dataTable = {
15, -- hp初期値
3 -- exp初期値
}
function myGameSetUp()
-- dataTable読み込み
local data = playdate.datastore.read(FILE_NAME)
if data ~= nil then
dataTable = data
end
menu = Menu(dataTable[1],dataTable[2])
-- メニュー: dataTable保存
local systemMenu = playdate.getSystemMenu()
local menuItem, error = systemMenu:addMenuItem("SaveData", function()
dataTable[1], dataTable[2] = menu:getData()
playdate.datastore.write(dataTable, FILE_NAME)
end)
local backgroundImage = gfx.image.new( "Images/background" )
assert( backgroundImage )
gfx.sprite.setBackgroundDrawingCallback(
function( x, y, width, height )
backgroundImage:draw( 0, 0 )
gfx.setImageDrawMode(gfx.kDrawModeFillWhite)
gfx.drawText(status, 20, 20)
gfx.drawText("HP:"..menu:getHp().."/"..menu:getMaxHp(), 20, 36)
gfx.drawText("EXP:"..menu:getExp().."/"..menu:getNextExp(), 20, 52)
gfx.setImageDrawMode(gfx.kDrawModeCopy)
end
)
end
-- 略 --
myGameSetUp()
関数内にsave_data.json
が保存してされていれば読み込み処理を実装します。
playdate.datastore.read([jsonファイル])
でシステムフォルダ内に保存されたjsonファイルを読み込みます。
jsonファイルの書き込みはメニューボタンを押した時に表示されるメニューにSaveData
という項目を追加し、選択すると書き込むようにします。
playdate.datastore.write([table], [jsonファイル名])
でシステムフォルダ内に指定したjsonファイル名で保存します。
Simulatorの場合、jsonファイルの保存先はPlayDateSDK/Disk/Data/[プロジェクト名]/[jsonファイル名]
となります。