• love2d教程30--文件系统


    在游戏里少不了文件操作,在love2d里我们可以直接用lua自带的io函数,如果不熟悉可以先读一下我的lua文件读写

    相对lua,love2d提供了更多的函数, 方便我们操作文件。不过可能处于安全考虑,love2d只允许我们访问两个目录:

      1、".love"文件根目录,或源码根目录

      2、游戏存档目录

    游戏存档目录在不同平台分别为:

    • Windows XP: C:Documents and SettingsuserApplication DataLOVE or %appdata%LOVE
    • Windows Vista and 7,8: C:UsersuserAppDataRoamingLOVE 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
  • 相关阅读:
    行政区划遮罩 -Leaflet
    WebGIS vs WebGL图形编程
    oracle 中 group by 加强
    Nagios监控服务搭建
    MySQL触发器使用详解
    mybatis--一对多关联
    mybatis--一对一关联查询
    mybatis--实现数据库增删改查
    mybatis--使用接口注解的方式实现Helloword
    mybatis--第一个mybatis程序
  • 原文地址:https://www.cnblogs.com/xdao/p/love2d-tutor30.html
Copyright © 2020-2023  润新知