在游戏里少不了文件操作,在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(, ) love.graphics.setCanvas(canvas)
canvas:clear()
love.graphics.setColor(, , )
love.graphics.circle('fill', , , , )
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

love2d教程30--文件系统的更多相关文章

  1. PS网页设计教程——30个优秀的PS网页设计教程的中文翻译教程

    PS网页设计教程--30个优秀的PS网页设计教程的中文翻译教程   作为编码者,美工基础是偏弱的.我们可以参考一些成熟的网页PS教程,提高自身的设计能力.套用一句话,"熟读唐诗三百首,不会作 ...

  2. [译]Vulkan教程(30)深度缓存

    [译]Vulkan教程(30)深度缓存 Depth buffering 深度缓存 Introduction 入门 The geometry we've worked with so far is pr ...

  3. Directx教程(30) 如何保证渲染物体不会变形

    原文:Directx教程(30) 如何保证渲染物体不会变形      在Directx11教程(6)中, 我们曾经实现过这个功能,但那时是在SystemClass中,处理WM_SIZE时候,重新调用m ...

  4. Unix/Linux环境C编程入门教程(30) 字符串操作那些事儿

    函数介绍 rindex(查找字符串中最后一个出现的指定字符) 相关函数 index,memchr,strchr,strrchr 表头文件 #include<string.h> 定义函数 c ...

  5. Cocos2d-x教程(30)-3.x版本号物理引擎的使用

    转载时请注明原文出处 : http://blog.csdn.net/u012945598/article/details/38417333 在Cocos2d-x 2.x的版本号中,开发人员能够直接使用 ...

  6. Unix/Linux环境C编程新手教程(30) 字符串操作那些事儿

    函数介绍 rindex(查找字符串中最后一个出现的指定字符) 相关函数 index,memchr,strchr,strrchr 表头文件 #include<string.h> 定义函数 c ...

  7. 关于love2d教程的更新

    实在抱歉,每周工作六天,一天13小时以上,周日想休息一下,love2d的估计一个月一篇都很难做到了. 三个月后公司的项目应该做完了,那时应该有时间了. love2d估计快发布0.9了,改动应该不是很大 ...

  8. love2d教程34--thread模块

    love的thread是一个单独的lua运行环境,与主线程平行.因此可以用线程来处理 处理复杂的计算,不过由于隔离,线程不能访问主线程的变量和方法,而且进程 间通信也受限.   可以在线程里共享lov ...

  9. love2d教程33--window模块

    --love的window模块比较简单,直接贴代码了function love.load() io.stdout:setvbuf("no") -- 设置io为无缓存模式 --获取显 ...

随机推荐

  1. 努力让java学习系统化

    这段日子接手一社区系统的开发.开发过程中感觉到自己接触到的和所作的多是业务逻辑性开发,对java开发到如今还没有一个清晰明白的路线,我越来越感觉到问题的重要性. 问题一:代码仅仅注重了功能实现,对代码 ...

  2. Hive配置与操作实践

    Hive配置与操作实践 @(Hadoop) 安装hive hive的安装十分简单,只需要在一台服务器上部署即可. 上传hive安装包,解压缩,将其配入环境变量. mysql的设置 在要作为元数据库的m ...

  3. 十个书写Node.js REST API的最佳实践(上)

    收录待用,修改转载已取得腾讯云授权 原文:10 Best Practices for Writing Node.js REST APIs 我们会通过本文介绍下书写Node.js REST API的最佳 ...

  4. RS开发日期提示控件默认为昨天之进阶篇

    时隔<RS开发日期提示控件默认为昨天>这篇博文已经很久了,请原谅我隔了这么久才继续来写这篇笔记.也希望读到这篇笔记的朋友可以从这篇笔记中学习到一些关于RS日期控件和JS的一些应用知识,当然 ...

  5. ie debugger注册码

    次软件是共享软件 也就是需要购买才能使用 囧rz 刚才搜了下竟然有人放出来DebugBar注册码 嘻嘻 我就分享了 对软件作者只能 -_-.say sorry! blog.sina.com.cn/se ...

  6. 【EasyUI】——EasyUI的布局

    做一个站点首先要有站点的布局,所谓的布局事实上就是网页的排版.就是说你的网页显示时是什么样子的. 就比方百度的首页: 无论是谁登录.网页都是这个样式的. EasyUI中的网页布局一共分为五部分,分别为 ...

  7. 谋哥:《App自推广》开篇之回到远古人类

    [谋哥每天一干货.第六十八篇] 这两天帮谋天团的杨整体验他的App--"闪聊"的内測新版,改版后这款App命名为"美丫",一款致力于打造国内首款专注于女性社交的 ...

  8. 嵌入式 如何定位死循环或高CPU使用率(linux)

    如何定位死循环或高CPU使用率(linux)  确定是CPU过高 使用top观察是否存在CPU使用率过高现象 找出线程 对CPU使用率过高的进程的所有线程进行排序 ps H -e -o pid,tid ...

  9. Spring MVC 使用拦截器 HiddenHttpMethodFilter配置Rest风格的URL

    <!-- 4.使用Rest风格的URI,将页面普通的post请求转为指定的delete或者put请求 --> 详细使用请参考这篇博客:地址:http://blog.csdn.net/ppl ...

  10. 算法笔记_136:交替字符串(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 输入三个字符串s1.s2和s3,判断第三个字符串s3是否由前两个字符串s1和s2交错而成且不改变s1和s2中各个字符原有的相对顺序. 2 解决方案 ...