|
其实两周前就想写写lua的东西,一直没有直接时间,今天终于抽出一点时间,然后来了解下lua是个什么东西,先对它有个大致理解。
一、什么是lua?
Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
Lua 应用场景有游戏开发、独立应用脚本、Web 应用脚本、扩展和数据库插件等
想学习lua 语法的同学可以看看这个链接:
Lua 教程 | 菜鸟教程
也可以去网上搜索,资料很多。我们的重点不在这里,往下看
二、那lua和其他计算机语言(C,C++、C# 、java等)有什么区别?
lua是解释型语言,C,C++等是编译型语言
编译型语言:编译型语言在执行之前要先经过编译过程,编译成为一个可执行的机器语言的文件,比如exe。因为翻译只做一遍,以后都不需要翻译,所以执行效率高。如C、C++、Objective-C等。
解释型语言:解释型语言编写的程序不进行预先编译,以文本方式存储程序代码。执行时才翻译执行。解释型语言很多,如java,C#,python,lua等。
熟悉java的同学都知道java有自己的虚拟机,java打包时会先编译成字节码,然后真正执行的时候虚拟机会解释执行。C#也有自己的虚拟机,所以C#也是解释型语言。
lua也一样有自己的虚拟机,你可以在打包的时候直接把lua文件打进包里,也可以将lua编译成字节码然后打进包里。编译成字节码后会节省掉运行时第一次加载时编译的时间,为什么是第一次呢?因为就算你不编译成字节码打包,真正运行的时候也不会每次都把lua编译成字节码,第一次编译完后会缓存的。
三、lua为什么大家都在用,它有什么好处呢?
lua做为解释型语言它的优势就在于,它小巧,方便,在大多数游戏项目中被用来做热更新使用。比如
1、因为它小巧,所以这个语言的学习成本是比较低的,对学过计算机的同学来说就是手到擒来的事。
2、如果我们的业务代码都是用lua开发的,那哪天线上出问题了,我们不需要重新打包apk和ipa文件,直接提交到CDN,然后玩家启动游戏后更新执行就可以修复问题
3、我们还可以更新整个新的功能代码,玩家不需求下载整包就可以玩到我们的新功能,既节约了玩家的流量也节省了我们打包和渠道审核的时间,如果你开发过游戏的话那你肯定体验过打包的痛苦。当然苹果是不允许我们这么干的,如果被发现,轻则整改,重则下架。
四、Unity中 Xlua 和 cocos2dx中的 lua 是一个东西吗?
答案是”是一个东西“。市面上出现了很多名词,如slua,ulua,xlua,tolua,其实他们都是对原生lua的封装
为什么要对原生代码进行封装呢?
熟悉lua的同学都知道,lua是用C语言写的,但在真正开发的时候我们需要暴露我们的接口、类库、以及引擎代码等暴露给lua层,然后我们在写lua代码的时候就可以调用到我们的引擎代码,实现我们想要的功能,那这个lua原生代码是没有现成的工具供我们使用的,需要我们自己添加,那xlua等就帮我们完成了这部分工作,不需要我们二次开发,拿来用就行。像cocos2dx中也是一样,看过cocos2d_lua——bindings代码的同学都知道,这个工程都是C++层导出给lua的绑定接口。
这里我们不深入将cocos的东西,只是拿来做个比较,让我们明白一个东西,其实所有的lua框架底层调用的都是lua原生代码,如果你之前用过cocos转到Unity,不用纳闷,他们就是一个东西。
如果你搞清了lua是什么东西,它有什么优点,以及它的语法后,那我们来学习下xlua这个中间层到底做了哪些东西,xlua是怎么和C#通信的?
请看下面的两篇文章 |
|