love2d教程30--文件系統


在游戲里少不了文件操作,在love2d里我們可以直接用lua自帶的io函數,如果不熟悉可以先讀一下我的lua文件讀寫

相對lua,love2d提供了更多的函數, 方便我們操作文件。不過可能處於安全考慮,love2d只允許我們訪問兩個目錄:

  1、".love"文件根目錄,或源碼根目錄

  2、游戲存檔目錄

游戲存檔目錄在不同平台分別為:

  • Windows XP: C:\Documents and Settings\user\Application Data\LOVE\ or %appdata%\LOVE\
  • Windows Vista and 7,8: C:\Users\user\AppData\Roaming\LOVE or %appdata%\LOVE\
  • Linux: $XDG_DATA_HOME/love/ or ~/.local/share/love/
  • Mac: /Users/user/Library/Application Support/LOVE/

讀文件兩個目錄都可以,但是寫文件只能在存檔目錄。love會先查找存檔目錄,在查找love文件目錄。所以有相同文件在

存檔目錄和love文件目錄,會優先使用存檔目錄。(因為在存檔目錄里已經找到了,個人感覺這么做不符合綠色軟件)

注意:所有的路徑都是相對於love文件的相對路徑。(除了使用get*Directory()獲取的)

 存檔目錄可以在con.lu里設置t.identity="目錄名"或者用love.filesystem.setIdentity設置。

 wiki里的函數已經很詳細了,我就說一下注意事項。

love.filesystem.isFused( )判斷love是否運行在沙盒模式,即getAppdataDirectory和getIdentity是同一目錄。

在沙盒模式下可以加載存檔目錄里的C動態庫。

love.filesystem.newFile()創建一個新文件,之后可以像lua里文件讀寫一樣操作文件,具體函數請看wiki

不過love里newFile()后得到的文件句柄,具有更多的操作,其中一個是setBuffer(),緩存模式BufferMode,

可以設置為none(立即寫入)、line(遇到換行符立即寫入,用在讀寫文本里)、full(要用flush函數顯示調用才行)。

 love.filesystem.newFileData( contents, name, decoder ) 支持普通文件和base64加密后的文件

love.filesystem.load()加載lua文件到內存,但不執行,如果要執行可以加括號即love.filesystem.load(file)()。

love.filesystem.mount() 掛載zip文件,或者目錄,這個功能方便了我們打包資源。壓縮文件可以和love文件在同一目錄。

例如content.zip里有myimage.png,那么我們可以love.filesystem.mount("content.zip""content"),

這個操作會把content.zip里的文件讀入,並在love的搜索路徑里生成一個content的虛擬目錄,那么我們可以用
assert(love.filesystem.exists("content/myimage.png"))來判斷是否成功讀入。

 下面是用love的文件讀寫保存的示例,文件保存在存檔目錄。

main.lua

local canvas
local dir
function love.load()
   --dir=love.filesystem.getWorkingDirectory()
   --love.filesystem.setIdentity(dir) --不能把可寫目錄改變到love文件目錄
   print(love.filesystem.getIdentity())
    canvas = love.graphics.newCanvas(800, 600)

    love.graphics.setCanvas(canvas)
        canvas:clear()
        love.graphics.setColor(255, 0, 0)
        love.graphics.circle('fill', 400, 300, 100, 100)
    love.graphics.setCanvas()
    
    local data=canvas:getImageData()
    local size=data:getSize()
    data:encode( "aaaaaa.png", "png" ) --這樣保存的沒問題
    local success =love.filesystem.write("aaaaaa.bmp", data, size) --有問題
    print(success)
    
    local fileContent="5paw5bm05b+r5LmQ77yB" --base64新年快樂
    --這個文件名可以和寫入時不同,個人感覺這個文件名參數多余
    local fileData=love.filesystem.newFileData(fileContent,"aaaa.txt","base64")
    local success =love.filesystem.write("aaaabb.txt", fileData)
    print(success)
    
end

function love.draw()
    
    love.graphics.draw(canvas)
   
end

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM