0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

PlaydateAdvent Calendar 2022

Day 23

【Playdate】ゲーム内データをjsonで外部保存・読込する

Posted at

sample.png

Playdateではゲーム内データをjsonとして保存したり、読み込みしたりすることが可能です。
前回のHPとEXPを変更するプロジェクトを改造します。

まず、前回のmenu.luaを変更します。

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代入できるようにします。
また、hpexpを返すgetData関数を用意します。

次に前回のmain.luaを編集します。

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ファイル名]となります。
スクリーンショット 2022-12-23 0.34.52.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?