mieki256's diary



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
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)、で実行。

jsonread_ss.png

JSONファイルを読み込んで、中に記述された情報を読み取ることができた。

少し解説。 :

love2d + json.lua は、おおよそ以下のような使い方になるっぽい。
  • 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

以上です。

過去ログ表示

Prev - 2021/06 - Next
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project