1. What is Lua?
Lua是什么呢?
官网给出的答案是:Lua is a powerful, fast, lightweight, embeddable scripting language.
相信是个攻城狮都看得懂吧,哈哈,就不用我解释啦。
Lua最大的优势在于,不用重新编译项目就可以修改游戏逻辑,大大缩短开发过程。
2. lua的堆栈和全局表
相信懂编程的人,对堆栈都不会陌生吧。lua的堆栈主要是用来让C++和lua通信的。它们并不认识彼此,只能用堆栈的方式来沟通。
lua的全局表就像一个map哈希表结构。例如lua有一个变量:name="facebook"。那么,全局表就存放了“name”和“facebook”的对应关系,因此lua就可以通过name在全局表中查找到facebook。
3. lua和C++的通信原理
我们来看一个简单的lua长什么样子。
-- hello.lua 文件
myName="beautiful girl"
现在假设一个场景,如果C++想知道这位lua叫什么名字的话,它们这时候就得通信了。让我们来看看通信的具体流程,如下图:
亲,图中的红色数字很重要哦,代表着通信顺序:
(1)C++想获取lua的myName字符串的值,所以它把myName放到lua堆栈(栈顶),这样就可以让lua看到了。
(2)lua从堆栈(栈顶)中获取myName,此时栈顶再次变为空。
(3)此时lua拿着这个myName去lua的全局表中查找myName对应的字符串。
(4)全局表根据myName返回一个字符串“beautiful girl”。
(5)lua把取得的“beautiful girl”字符串放到堆栈(栈顶)。
(6)C++可以从lua堆栈中取得“beautiful girl”,也就得到了这位美丽的lua小姐的名字。
这就是Lua和C++通信最简单的情况了,但基本原理都是一样的。