在之前lua学习:lua作配置文件里,我们学会了用lua作配置文件。

其实lua在游戏开发中可以作为一个强大的保存、载入游戏数据的工具。

1.载入游戏数据

比如说,现在我有一份表单:

data.xls

用什么工具解析这个Excel文件并将数据载入游戏?

我们可以使用Lua来完成这个工作。不过要先将表单保存为csv文件(数值用逗号隔开的文件)。

从表单中,我们可以得知第一行是键名,剩下的行是数值。我们可以用下面的lua函数载入该csv文件并保存到表中。

function GetLines(fileName)index = 0myLines = {}for line in io.lines(string.format("%s%s", "./", fileName)) doindex = index + 1myLines[index] = lineendreturn index, myLines --返回文件的行数和一个包括所有行的表
end

io.lines ([filename]):打开指定的文件filename为读模式并返回一个迭代函数,每次调用将获得文件中的一行内容,当到文件尾时,将返回nil,并自动关闭文件。

然后,可以再创建一个函数解析每行的字符,并创建表格保存该行的所有数据。

function GetValues(myString)num = 0values = {}if myString ~= nil thenwhile string.find(myString,",") ~= nil doi,j = string.find(myString,",")num = num + 1values[num] = string.sub(myString,1, j-1)myString = string.sub(myString, j+1, string.len(myString))endnum = num + 1 --接着对第二行数据values[num] = myStringendreturn num, values
end

string.find(s, pattern, pos):从源字符串s找到匹配pattern返回,pos参数可选, 表示起始位置,如果匹配不成功,返回nil。

string.sub():函数截取字符串s的从第i个字符到第j个字符之间的串。

在这个函数中,我们传入字符。通过调用string.find()和string.sub,返回数值的个数和包含了所有数值的表。通过这两个简单的处理步骤可以让用户解析几乎所有的csv文件,不论简单还是复杂的文件。

我们可以写个函数测试一下:

function LoadDatas()myCharacters = {}numLines, allLines = GetLines("data.csv")--读第一行的键值count, myLabels = GetValues(allLines[1])--忽略第一行for index = 2, numLines docount, charHold = GetValues(allLines[index])myCharacters[index-1] = {}for index2 = 1, count domyCharacters[index-1][index2] = charHold[index2]endend--now print themfor index = 1, 3 dofor index2 = 1, table.getn(myLabels) doprint(myLabels[index2], myCharacters[index][index2])endend
end

得到一个二维表:

2.保存游戏数据

我们可以利用lua内建的I/O功能来处理数据输出。只要确保输出的数据是采用合适的语法,就可以使用dofile()载入数据了。
function save()myFile = io.open("save_data.lua", "w")if myFile ~= nil thenmyFile:write("-- 游戏数据保存文件")myFile:write(string.char (10))myFile:write(string.char (10))myFile:write(string.format("%s%s", "-- 文件创建于: ", os.date()))myFile:write(string.char (10))myFile:write(string.char (10))myFile:write("myValue = 5")io.close(myFile)end
end

3.载入保存的数据

利用dofile()操作就可以恢复游戏的数据了。

lua学习:使用Lua处理游戏数据相关推荐

  1. 游戏开发学习笔记——lua脚本语言——安装、汉化与小测试(解决lua运行代码乱码问题)

    游戏开发学习笔记--lua脚本语言--安装.汉化与小测试 FOR THE SIGMA FOR THE GTINDER FOR THE ROBOMASTER 简介: Lua 是一种轻量小巧的脚本语言,用 ...

  2. lua 学习笔记---游戏开发第一步

    lua 学习笔记-从数组开始 数组 数组大小范围不一定需要在声明是确定,可以改变 一维数组 例 > array = {"Lua", "lualu"} &g ...

  3. Lua学习笔记(一)

    一.先来说说什么是lua 至于什么lua 的起源啊,什么大道理一样的东西就自行百科吧 我们重点谈谈为什么要学lua 目前lua的主要应用有 游戏方面的热更新框架,由于lua属于脚本语言,说起脚本语言你 ...

  4. cocos2d lua 学习文档

    游戏 : 2048 功能 : 开始 ,进入游戏 ,设置 ,分数系统,任务系统,金币系统 ,   待开发(背包,抽奖,签到,以及sdk和分享) 游戏源码地址: https://github.com/li ...

  5. 从Lua学习JavaScript(一)

    学习 Lua 对于了解 Javascript 的人来说就是小菜一碟,Tyler Neylon 写了三篇文章来解释其中的原因,这是其中的第一篇. 这是通过 Javascript 来学习 Lua 系列文章 ...

  6. 【lua学习】3.字符串

    [lua学习]3.字符串 Lua字符串的概况 字符串实现 字符串结构TString 全局字符串表stringtable 新建字符串luaS_newlstr (先查表,再决定创建与否) 新建字符串 ne ...

  7. lua学习之类型与值篇

    类型与值 lua 是动态类型的语言 在语言中没有类型定义的语法 每个值都携带有它的类型信息 8种基础类型 用 type 可以返回这个值的类型的名称 将一个变量用于不同类型,通常会导致混乱的代码 但合理 ...

  8. Python 和 Lua 学习比较 一

    好记性不如烂笔头. 作的笔记以后也能来再看看. python有多种语言写成的版本,这里只记录C/C++写的版本,lua本身是使用标准C/C++编写的. 所以各位同学知道C的强大了吧,我觉得作为程序员, ...

  9. lua学习01:c调用lua、lua调用c、lua的协程、lua的常见API、lua读取配置文件总结

    文章目录 1.c通过虚拟机和虚拟栈调用lua test-vm.c test-vm.lua 打印效果 2.lua通过虚拟机和虚拟栈调用c lua-tbl.c test-tbl.lua 3.lua的协程 ...

最新文章

  1. 浅析_tmain()与main()的区别
  2. Redis学习(2)-redis安装
  3. hdu4179 限制最短路
  4. linux 比较新的设备树 详解 device tree
  5. 笔记-项目人力资源管理-建设项目团队
  6. Eclipse is running in a JRE, but a JDK is required 解决方法(转)
  7. Android之Gradle Plugin Samples 之Gradle Library Projects
  8. 思科命令 service password-encryption
  9. 最新python中一升级所有已安装的包方法
  10. vue-calendar 基于 vue 2.0 开发的轻量,高性能日历组件
  11. excel自动合并两列
  12. iOS 开发的一些奇巧淫技
  13. 【复盘】如何写一份教程?
  14. POE供电 网线 电源 网络情况图
  15. 【狂神说Java】Docker最新超详细版教程通俗易懂 - 学习笔记
  16. 【STM32篇】驱动MXL90614红外测温模块
  17. 温习Android基础知识——《第一行代码(第三版)》读书笔记 Chapter 2 Kotlin语法
  18. 抖音测试像哪个明星的软件,抖音中的测测你像哪位明星特效如何拍摄
  19. Compiling C
  20. Django restframework中 Serializer 序列化方法详细介绍

热门文章

  1. 基于re模块的计算器
  2. B/S系统常见缺陷整理和解决方案
  3. SharePoint 2010 BCS - 简单实例(二)外部列表创建
  4. Zend Framework数据库操作
  5. 2009_01_15_星期三
  6. 《LeetCode力扣练习》第46题 全排列 Java
  7. python unicodeencodeerror_解决 Python UnicodeEncodeError 错误
  8. 鸿蒙系统手机还会出吗,华为最强手机即将到来,可能还有华为鸿蒙系统加入!你期待吗?...
  9. C++知识点16——使用C++标准库(IO流格式控制)
  10. To connect to files.phpmyadmin.net insecurely, use `--no-check-certificate‘