Lua和C++的通信流程分解
网上关于lua的教程似乎还没有泛滥,最近刚好学习在cocos2d-x使用lua,当然了,我是写教程狂,我会分享我的学习心得的~
(旁白:我噗~!每次你写东西我就要吐槽,你不累么= =)
这是第一课,先来让lua和c++认识一下,顺便让它们逛街吃饭牵小手什么的…
(旁白:。。。吹,继续吹)
1. lua的堆栈和全局表
我们来简单解释一下lua的堆栈和全局表,堆栈大家应该会比较熟悉,它主要是用来让c++和lua通信的,是的,它们并不认识对方,只能通过堆栈来沟通,就像写信一样。
(旁白:它们不会用微信吗?!微信~!不知道?)
lua的全局表又是什么呢?可以想象成是一个map哈希表结构,比如lua有一个变量:
那么,全局表就存放了”name”和”hello”的对应关系,lua可以通过name在全局表中查找到hello。应该是这样的~
(旁白:应该= =!)
2. lua和c++的第一次通信
现在来设计一个场景,c++在一次javascript开发者大会上看到lua在演讲,于是c++被lua深深吸引了。
(旁白:javascript大会…那为毛是lua在演讲~!)
我们来看看这位美丽的lua小姐长什么样:
myname = "beauty girl"
ok,一位简单又美丽lua小姐。
然后,c++想知道lua叫什么名字,所以,它们必须要通信了。来看看通信流程:
请注意红色数字,代表通信顺序:
1) c++想获取lua的myname字符串的值,所以它把myname放到lua堆栈(栈顶),以便lua能看到
2) lua从堆栈(栈顶)中获取myname,此时栈顶再次变为空
3) lua拿着这个myname去lua全局表查找myname对应的字符串
4) 全局表返回一个字符串”beauty girl”
5) lua把取得的“beauty girl”字符串放到堆栈(栈顶)
6) c++可以从lua堆栈中取得“beauty girl”,也就是这位美丽的lua小姐的名字了~
世界如此美妙,这是如此的简单。
(旁白:好吧,这次不吐槽,确实简单…)
不过,(旁白:我就知道~!我就知道事情没有那么简单!)这只是最简单的情况,实际上各种c++和lua的操作比这要复杂多了,但基本原理是一样的。
好的,趁着旁白还没有吐槽,我们要结束第一章了,希望能帮到大家。
(旁白:说得好像我好喜欢抢戏似的,我像这样的人吗?= = 等等~!例子呢?demo呢?)
噢,demo将在下一章介绍。
(旁白:吊胃口。。。绝对是在吊胃口…你以为我会期待吗,魂淡…心好痒~!)
上一篇: node事件循环中事件执行的顺序
下一篇: ViewPager之上传报名信息图片