这两天加上了储存和载入功能,似乎可以开始利用这编辑器设定敌人的移动路线了。
一开始我用了sys.save/sys.load 来进行有关的操作:
local path = {}
。。。
local success = sys.save(sys.get_save_file("BoxShooter", "enemy_path"), path)
。。。
local path = sys.load(sys.get_save_file("BoxShooter", "enemy_path"))
这两个系统功能相当好用,可以很方面地存取一个 table,但后来我发现它们是把资料存放到游戏所拥有的空间的,不知道存的档案是什么格式,也不能把档案提取出来当为资源,然后放到游戏包里拿来用,基本上只适用于存取游戏进行时的资料,比如用户的进度设定等等。
想把资料存为可以再用的档案资源,还是要用低端一点的 io 库,为了以后用起来方便,我也以 json 的格式储存有关的资料,这样子就算手动更改也可以:
local f = io.open("path.json", "r")
local str = f:read("*a")
local path = json.decode(str)
f:close()
local f = io.open("path.json", "w")
local version = 0
f:write(string.format('"version":%d,\n', version))
。。。
f:flush()
f:close()
而这里也发现了 Defold 的一个短板,系统里竟然只有 json.decode 而没有 json.encode !所以我只好用最简单的 json 结构来记录画出来的路线,在存档时自己按着 json 的格式写进去。
今天还发现一个有趣的事,一般我习惯了用 "#" 来数 table 里有多少东西,如果返回是0就代表它是空的,但原来如果 table 里的 key 没有一个是数字的活,就算里面有东西 "#" 也会返回 0 !正确测试 table 是不是空的,应该如下面这样子做:
if not next(mid_points) then
print("It's empty")
end