日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

love2d杂记6--动态读写外部lua文件

發布時間:2024/9/5 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。