
這兩天加上了儲存和載入功能,似乎可以開始利用這編輯器設(shè)定敵人的移動路線了。
一開始我用了sys.save/sys.load 來進(jìn)行有關(guān)的操作:
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"))
這兩個系統(tǒng)功能相當(dāng)好用,可以很方面地存取一個 table,但后來我發(fā)現(xiàn)它們是把資料存放到游戲所擁有的空間的,不知道存的檔案是什么格式,也不能把檔案提取出來當(dāng)為資源,然后放到游戲包里拿來用,基本上只適用于存取游戲進(jìn)行時的資料,比如用戶的進(jìn)度設(shè)定等等。
想把資料存為可以再用的檔案資源,還是要用低端一點(diǎn)的 io 庫,為了以后用起來方便,我也以 json 的格式儲存有關(guān)的資料,這樣子就算手動更改也可以:
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()
而這里也發(fā)現(xiàn)了 Defold 的一個短板,系統(tǒng)里竟然只有 json.decode 而沒有 json.encode !所以我只好用最簡單的 json 結(jié)構(gòu)來記錄畫出來的路線,在存檔時自己按著 json 的格式寫進(jìn)去。
今天還發(fā)現(xiàn)一個有趣的事,一般我習(xí)慣了用 "#" 來數(shù) table 里有多少東西,如果返回是0就代表它是空的,但原來如果 table 里的 key 沒有一個是數(shù)字的活,就算里面有東西 "#" 也會返回 0 !正確測試 table 是不是空的,應(yīng)該如下面這樣子做:
if not next(mid_points) then
? ? print("It's empty")
end