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\LOVEor%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--文件系统的更多相关文章
- PS网页设计教程——30个优秀的PS网页设计教程的中文翻译教程
PS网页设计教程--30个优秀的PS网页设计教程的中文翻译教程 作为编码者,美工基础是偏弱的.我们可以参考一些成熟的网页PS教程,提高自身的设计能力.套用一句话,"熟读唐诗三百首,不会作 ...
- [译]Vulkan教程(30)深度缓存
[译]Vulkan教程(30)深度缓存 Depth buffering 深度缓存 Introduction 入门 The geometry we've worked with so far is pr ...
- Directx教程(30) 如何保证渲染物体不会变形
原文:Directx教程(30) 如何保证渲染物体不会变形 在Directx11教程(6)中, 我们曾经实现过这个功能,但那时是在SystemClass中,处理WM_SIZE时候,重新调用m ...
- Unix/Linux环境C编程入门教程(30) 字符串操作那些事儿
函数介绍 rindex(查找字符串中最后一个出现的指定字符) 相关函数 index,memchr,strchr,strrchr 表头文件 #include<string.h> 定义函数 c ...
- Cocos2d-x教程(30)-3.x版本号物理引擎的使用
转载时请注明原文出处 : http://blog.csdn.net/u012945598/article/details/38417333 在Cocos2d-x 2.x的版本号中,开发人员能够直接使用 ...
- Unix/Linux环境C编程新手教程(30) 字符串操作那些事儿
函数介绍 rindex(查找字符串中最后一个出现的指定字符) 相关函数 index,memchr,strchr,strrchr 表头文件 #include<string.h> 定义函数 c ...
- 关于love2d教程的更新
实在抱歉,每周工作六天,一天13小时以上,周日想休息一下,love2d的估计一个月一篇都很难做到了. 三个月后公司的项目应该做完了,那时应该有时间了. love2d估计快发布0.9了,改动应该不是很大 ...
- love2d教程34--thread模块
love的thread是一个单独的lua运行环境,与主线程平行.因此可以用线程来处理 处理复杂的计算,不过由于隔离,线程不能访问主线程的变量和方法,而且进程 间通信也受限. 可以在线程里共享lov ...
- love2d教程33--window模块
--love的window模块比较简单,直接贴代码了function love.load() io.stdout:setvbuf("no") -- 设置io为无缓存模式 --获取显 ...
随机推荐
- 在Docker和Kubernetes上运行MongoDB微服务
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟.容器是完全使用沙箱机制,相互之间不会有任何接 ...
- Fireworks如何制作透明窗口PNG
1 做好的透明PNG窗口如图所示,打开之后可以发现其实分层的PNG和Photoshop打开一个PSD文件类似. 2 但是Photoshop并不会像Fireworks一样可以编辑分层的PNG,在打开分层 ...
- SQL语言 之 事务控制
一.概述 事务是一些数据库操作的集合,这些操作由一组相关的SQL语句组成(只能是 DML 语句),它们是一个有机的整体,要么全部成功执行,要么全部不执行.事务时数据库并发控制和恢复技术的基本单位. 事 ...
- TP框架中关于if、else 分支结构逻辑错误
TP框架中关于if.else 分支结构逻辑错误 代码中没有任何错误 将注释往下一行就可以解决 造成问题的原因: TP框架中 想分配变量可以使用assign方法 在[模块]中: $this->as ...
- Python 转义符
定义字符串前面我们讲解了什么是字符串.字符串可以用''或者""括起来表示.如果字符串本身包含'怎么办?比如我们要表示字符串 I'm OK ,这时,可以用" "括 ...
- 利用SQL语句重置数据库中所有表的标识列(自增量)
可以应用于2种场景: 1.清空所有表中的数据,数据清空后,最好是能够让表中的标识列从1开始记数,所以要重置标识列的当前值. 2.用复制的方式,发布订阅同步数据之后,订阅端的数据不会自动增长,比如自增I ...
- 用sqldevelop进行连接linux中ret Hat 6.2 中的oracle步骤
1.下载Oracle Instant Client (32-bit) 因为PL/SQL只支持32位的Oracle,所以必须下载对应的32位的才可以. 只需要下载instantclient-basic- ...
- nginx代理tomcat
http://blog.csdn.net/kongqz/article/details/6838989 http://www.800l.com/linux-nginx-tomcat-jdk.html ...
- Android开发之帐户管理
android.accounts主要包括了集中式的帐户管理API, AccountManagerCallback, AccountManagerFuture, OnAccountsUpdateList ...
- HttpSession 和URLRewriting
在上面使用Cookie技术存储会话信息的时候发现Cookie存储的数据有限,而且每次需要客户端浏览器携带数据,导致网络的负载过大.因此如果需要存储相对大量的数据,那么可以直接将数据存储在服务器端,这样 ...