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
[ ツッコむ ]
以上です。