love2d杂记6--动态读写外部lua文件
生活随笔
收集整理的這篇文章主要介紹了
love2d杂记6--动态读写外部lua文件
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
我們可能遇到這種情況,即在游戲過程中保存臨時數據,之后可能還需要修改。
為此我簡單的寫了一個文件讀寫的函數,不過不支持中文,即復雜的數據類型,
而且要求都是以表的形式存取,并支持簡單的表(即表中沒有嵌套表),參考了
《lua程序設計第二版》12.2節。
代碼如下:
--用來格式化數據位字符串 function serialize (o)local str=""if type(o) == "number" thenstr=str..oelseif type(o) == "string" thenstr=str..string.format("%q", o)elseif type(o) == "table" thenstr=str.."{\n"for k,v in pairs(o) dostr=str.." "..k.. " = "str=str..serialize(v)str=str..",\n"endstr=str.."}\n"elseerror("cannot serialize a " .. type(o))endreturn str end --存儲,file文件名,name表名,o要存的表 function save(file,name,o)local f=io.open(file,"a")f:write(name,"=")f:write(serialize(o))f:close() end--修改,filename文件名,name表名,arg表里的索引,value索引arg要修改的值,isStr表示value是否為字符串默認為假 function edit(filename,name,arg,value,isStr)local f=assert(io.open(filename,"r"))local str=""isStr=isStr or falsefor line in f:lines() doif string.find(line,"%s*"..arg.." =") then --匹配以空白開頭并以" ="結尾的字符串,即索引,可以打開sav.lua一看if isStr thenline=string.gsub(line,"=.*","= \""..value.."\",") --匹配以"="開頭的字符串,即值elseline=string.gsub(line,"=.*","= "..value..",")endstr=str..line.."\n"elsestr=str..line.."\n"endendf:close()local f2=io.open("tmp.lua","w")f2:write(str)f2:close()os.remove(filename)os.rename("tmp.lua",filename)endA={a=1,b=2,c="wuji"} --保存時的表名不要與先在的表名相同 save("sav.lua","A1",A) --使用dofile加載,require只加載一次 dofile("sav.lua") print(A1.c) --wuji edit("sav.lua","A1","c","banshan",true) --修改為c為banshan dofile("sav.lua") print(A1.c)--banshan edit("sav.lua","A1","b","5") --修改b為5 dofile("sav.lua") print(A1.b) --5?
轉載于:https://www.cnblogs.com/xdao/archive/2013/04/14/love2d-miscellanies06.html
總結
以上是生活随笔為你收集整理的love2d杂记6--动态读写外部lua文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AT89C52编程开发源代码
- 下一篇: Apache 配置虚拟目录、主机的疑惑及