一.先来说说什么是lua
我们重点谈谈为什么要学lua
目前lua的主要应用有
- 游戏方面的热更新框架,由于lua属于脚本语言,说起脚本语言你可能会想到JavaScript,没错,最大的特点就是不用发布时一起拿去编译,而是在用户使用时直接渲染,对于lua来说就是直接调用,那么我们再来想想,一般我们的手机游戏是不是经常更新?更新的时候为什么只是下载几m的数据而不是要求玩家把整个游戏安装包下载下了再覆盖(当然有的时候也存在要求玩家去下载整个包,那种情况是有重大变化的更新,属于架构层面的问题,我们这里不深入谈,大部分情况都是在游戏内进行热更新)。那我们换个思路想,是不是除了lua其他语言就不行呢?当然,条条大路通罗马,只是效率不一样而已,比如我一样可以把程序拆分成很多个dll,每次检查更新dll只是这样导致整个架构混乱,而且效率低下。当然现在做热更新用的肯定不是原生的lua,不过我们学习当然要从基本学起,以后的事情以后再说。
- 除了热更新,其他比如演算动画,剧本,角色数据等这些经常改动的东西也可以用lua来写,你想,我们做了个3d的rpg游戏,然后里面有句台词我们不满意要改,难道还要把整个客户端都重新编译一下嘛?有点夸张,不过意思大家都懂。
- 游戏之外,lua可以和大部分编程语言混合使用,结合lua轻便,随性,方便扩展的特点,可以轻松做到写插件,web脚本,应用扩展等等优点。
其次,比起大部分编程语言,lua的学习成本很低,语言风格随意,而且又可以辅助其他编程语言进行开发,可以说是性价比最高的语言之一,所以不管是不是从事游戏相关行业,学习lua还是很有必要的。
二.开始lua之旅
废话这么多,让我们直接开始,先让我们搭建开发环境
lua和java一样是有专门的虚拟机的,我们称之为LVM,LVM是基于
堆栈的结构,或者说整个lua语言底层非常依赖
栈,基于堆栈有什么好处?稍稍了解过cil的同学肯定想到了,与cpu啊系统啊这些统统无关(废话么,本来就是虚拟机)( ̄▽ ̄)~*
关于环境安装请看里面相当详细了,基本是一站式服务,顺带还装上了ide
基本语法大部分都和c差不多吧,我这里就不废话, 不然就成话痨了,下面开始上干货
三.Lua基础语法难点,疑点
- lua中nil表示无,类似于null,但某变量a不用时直接a=nil即可,gc会自动回收
- lua中默认变量为全局变量,局部变量请加上local
- lua中的表类似数组和字典的结合体,既可以用数字索引a[1],也可以用字符串索引a[key],当索引不存在时,返回nil