2021/06/20(日) [n年前の日記]
#1 [love2d] love2dでJSONファイルを読み込む
2Dゲームエンジン love2d を使ってJSONファイルを読み込めないか実験中。Windows10 x64 20H2 + love2d 11.3 で動作確認。
_LoVE - Free 2D Game Engine
love2d は Lua言語でスクリプトを書いていくけど、JSONを扱える標準ライブラリは入ってない。が、ググっていたら、json.lua が love2d で使える、という話を見かけて。
_Arson - your companion for json,lua - LoVE
_rxi/json.lua: A lightweight JSON library for Lua
MITライセンスのライブラリ。コレを使わせてもらおう…。ありがたや。
json.lua をDLして、love2d用のスクリプト ―― main.lua や conf.lua と同階層に置く。
main.lua, conf.lua, data.json は以下。
_main.lua
_conf.lua
_data.json
任意のディレクトリ(jsonread とか)を作成して、main.lua, conf.lua, data.json, json.lua を置いて、love ディレクトリ名 (例: love jsonread)、で実行。
JSONファイルを読み込んで、中に記述された情報を読み取ることができた。
_LoVE - Free 2D Game Engine
love2d は Lua言語でスクリプトを書いていくけど、JSONを扱える標準ライブラリは入ってない。が、ググっていたら、json.lua が love2d で使える、という話を見かけて。
_Arson - your companion for json,lua - LoVE
_rxi/json.lua: A lightweight JSON library for Lua
MITライセンスのライブラリ。コレを使わせてもらおう…。ありがたや。
json.lua をDLして、love2d用のスクリプト ―― main.lua や conf.lua と同階層に置く。
main.lua, conf.lua, data.json は以下。
_main.lua
function love.load()
json = require 'json'
text = love.filesystem.read('data.json')
o = json.decode(text)
cur_time = 0
end
function love.update(dt)
cur_time = cur_time + dt
end
function love.draw()
y = 8
love.graphics.print("ESC to exit.", 8, y)
y = y + 32
for key, value in pairs(o) do
local fn = value["path"]
love.graphics.print(key .. " : " .. fn, 8, y)
y = y + 24
end
end
function love.keypressed(key, isrepeat)
if key == "escape" then
love.event.quit()
end
end
_conf.lua
function love.conf(t) t.window.width = 640 t.window.height = 480 t.window.title = "Json read" t.window.fullscreen = false -- t.window.fullscreentype = "exclusive" end
_data.json
{
"Title": {
"path": "imgs/img01.png",
"start": 1,
"area": [{
"link": "Hall",
"type": "rect",
"pos": [561, 399, 718, 582]
}
]
},
"Hall": {
"path": "imgs/img02.png",
"area": [{
"link": "RoomYellow",
"type": "poly",
"pos": [80, 201, 310, 355, 308, 594, 84, 706]
}, {
"link": "RoomGreen",
"type": "rect",
"pos": [471, 378, 673, 564]
}, {
"link": "RoomBrown",
"type": "poly",
"pos": [1059, 337, 1231, 194, 1225, 706, 1059, 587]
}
]
},
...(中略)...
}
任意のディレクトリ(jsonread とか)を作成して、main.lua, conf.lua, data.json, json.lua を置いて、love ディレクトリ名 (例: love jsonread)、で実行。
JSONファイルを読み込んで、中に記述された情報を読み取ることができた。
◎ 少し解説。 :
love2d + json.lua は、おおよそ以下のような使い方になるっぽい。
以下が参考になった。
_How do you read from a file? - LoVE
- json = require 'json' で、jsonライブラリを使えるようにする。
- text = love.filesystem.read('data.json') で、data.json をテキストデータとして読み込む。love.filesystem.read() は love2d で用意されている、テキストファイル読み込み用の関数。
- data = json.decode(text) で、JSONデータとして記述されたテキストを解析して、Luaのテーブルに変換する。
- あるいは、text = json.encode(data) で、Luaのテーブルを JSONデータ文字列に変換することもできるらしい。
以下が参考になった。
_How do you read from a file? - LoVE
[ ツッコむ ]
以上です。
