在游戏里少不了文件操作,在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. ActiveMQ API 详解

    4.1 开发JSM的步骤 广义上说,一个JMS 应用是几个JMS 客户端交换消息,开发JMS 客户端应用由以下几步构成:      用JNDI 得到ConnectionFactory 对象:      ...

  2. Xamarin C# Android for Windows 安装

    Xamarin C# Android for Windows  安装 Xamarin的. Android手动安装 安装Xamarin的  Android在Windows机器上   大多数时候,Xama ...

  3. 极客Web开发资源大荟萃

    前端开发已经成为当前炙手可热的技术之一.此次我们总结的前端开发包含了相关技术和流行趋势,希望从中大家可以挖掘你们所需要的,并带给你们最有价值的帮助!原文来自:极客标签 使用代码回放来愉快地学习前端知识 ...

  4. 10分钟,利用canvas画一个小的loading界面

    首先利用定义下canvas得样式 <canvas width="1024" height="720" id="canvas" styl ...

  5. MFC获得主窗体和父窗体指针

    MFC编程中经常遇到子窗体向父窗体传递參数的情况,这就须要获得父窗体的指针. 例:主对话框CMyMainDlg通过buttonButtonA进入对话框CMyParentDlg.CMyParentDlg ...

  6. C#应用视频教程2.4 OPENGL虚拟仿真介绍

    这一部分我们首先实现视图控制(包括了平移/旋转/缩放),前面我们已经讲过,通过lookat一个函数,或者通过translate+rotate两个函数,都能实现视图的控制(两个函数的方式比较简单,但是通 ...

  7. SQL语言 之 数据查询

    在Oracle 数据库中,SELECT 语句的基本语法为: SELECT [ALL|DISTINCT] column_name [,expression...] FROM table1_name [, ...

  8. android的开发 华为手机上不显示menu键

    android的开发,华为手机上不显示menu键解决办法: 在AndroidManifest.xml中讲targetSdkVersion改为9. <uses-sdk android:minSdk ...

  9. 利用JqGrid结合ashx显示列表之一

    最近项目决定运用JqGrid列表控件显示相关数据,以前接触比较多还是easyui和Ext.Net的列表控件,文章简单写的小实例进行一个总结: 1:引入相关的JS及CSS文件,JqGrid目前可以利用J ...

  10. 快速排序以及第k小元素的线性选择算法

    简要介绍下快速排序的思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此 ...