笨木头  2012-12-27 10:29     Cocos2d-x,Cocos2d-x Lua,Cocos2d-x2.0     阅读(11162)     评论(21)
转载请注明,原文地址: http://www.benmutou.com/archives/49
文章来源:笨木头与游戏开发

【木头Cocos2d-x 026】Lua篇(第01章):让Lua和C++牵手

 

网上关于Lua的教程似乎还没有泛滥,最近刚好学习在Cocos2d-x使用Lua,当然了,我是写教程狂,我会分享我的学习心得的~

(旁白:我噗~!每次你写东西我就要吐槽,你不累么= =

 

 

这是第一课,先来让LuaC++认识一下,顺便让它们逛街吃饭牵小手什么的...

(旁白:。。。吹,继续吹)

 

 

注:本系列教程部分内容参考《游戏人工智能编程 案例精粹》一书。

 

笨木头花心贡献,啥?花心?不呢,是用心~

转载请注明,原文地址
http://blog.csdn.net/musicvs/article/details/8440707 

 

正文:

 

 

1. Lua的堆栈和全局表

我们来简单解释一下Lua的堆栈和全局表,堆栈大家应该会比较熟悉,它主要是用来让C++Lua通信的,是的,它们并不认识对方,只能通过堆栈来沟通,就像写信一样。

(旁白:它们不会用微信吗?!微信~!不知道?)

 

Lua的全局表又是什么呢?可以想象成是一个map哈希表结构,比如Lua有一个变量:

name = “hello”

那么,全局表就存放了”name”和”hello”的对应关系,Lua可以通过name在全局表中查找到hello。应该是这样的~

(旁白:应该= =!)

 

2. LuaC++的第一次通信

现在来设计一个场景,C++在一次JavaScript开发者大会上看到Lua在演讲,于是C++Lua深深吸引了。

(旁白:JavaScript大会...那为毛是Lua在演讲~!)

 

我们来看看这位美丽的Lua小姐长什么样:

-- hello.lua 文件
myName = "beauty girl"


 

OK,一位简单又美丽Lua小姐。

然后,C++想知道Lua叫什么名字,所以,它们必须要通信了。来看看通信流程:

 

请注意红色数字,代表通信顺序:

1) C++想获取LuamyName字符串的值,所以它把myName放到Lua堆栈(栈顶),以便Lua能看到

2) Lua从堆栈(栈顶)中获取myName,此时栈顶再次变为空

3) Lua拿着这个myNameLua全局表查找myName对应的字符串

4) 全局表返回一个字符串”beauty girl”

5) Lua把取得的“beauty girl”字符串放到堆栈(栈顶)

6) C++可以从Lua堆栈中取得“beauty girl”,也就是这位美丽的Lua小姐的名字了~

世界如此美妙,这是如此的简单。

(旁白:好吧,这次不吐槽,确实简单...

 

不过,(旁白:我就知道~!我就知道事情没有那么简单!)这只是最简单的情况,实际上各种C++Lua的操作比这要复杂多了,但基本原理是一样的。

好的,趁着旁白还没有吐槽,我们要结束第一章了,希望能帮到大家。

(旁白:说得好像我好喜欢抢戏似的,我像这样的人吗?= = 等等~!例子呢?Demo?

 

噢,Demo将在下一章介绍。

(旁白:吊胃口。。。绝对是在吊胃口...你以为我会期待吗,魂淡...心好痒~!)

 

 

.

.

21 条评论
  • 闪小达 2013-12-04 16:56:08

    木头你啥血型啊~
    0回复
    • 博主 糟糕_树叶的mut 2013-12-05 15:18:24

      你这是要做法的节奏吗
      0回复
      • 闪小达 2013-12-05 18:48:01

        没 感觉你性格很鲜明 很像A型血~
        0回复
        • 博主 糟糕_树叶的mut 2013-12-06 11:38:36

          噗哈哈,好吧,不过我不是
          0回复
          • 闪小达 2013-12-06 17:27:17

            木头你是啥血型呀 好奇~~
            0回复
            • 博主 糟糕_树叶的mut 2013-12-06 21:37:33

              噗哈哈,我是XO型
              0回复
              • 闪小达 2013-12-09 10:01:04

                发现在这里盖楼好好玩哦~
                0回复
                • 博主 糟糕_树叶的mut 2013-12-09 21:39:59

  • sakishum 2013-06-19 11:10:39

    看LZ的文章,有种精神分裂的赶脚~
    0回复
    • 博主 糟糕_树叶的mut 2013-06-19 20:00:52

      有这种赶脚就对了~
      0回复
  • yzdzidan 2013-03-29 17:48:00

    你好啊 看了你几篇了 觉得很不错~这里是不是有写错了?
    执行LUA脚本在前,C++获得全局变量在后,是不是应该是先LUA把变量名和字符串放在了堆栈和表里,然后C++再GETGLOBAL从堆栈里找到这个变量,再通过表来找到这个字符串呢?这边我看是有先后的吗。。
    0回复
  • szulee 2012-12-27 10:40:00

    写的挺好的。 简单易懂。
    博主挺犀利的。
    0回复
  • musicvs 2012-12-27 12:08:00

    [reply]szulee[/reply]
    谢谢,嘿嘿~
    0回复
  • raaland 2012-12-30 21:37:00

    新的课程开始了o(∩_∩)o...
    0回复
  • musicvs 2012-12-31 10:14:00

    [reply]raaland[/reply]
    哈哈,希望你喜欢~
    0回复
  • musicvs 2013-01-01 10:15:00

    本系列教程示例源码下载(总共5个示例,都放在一个工程里):http://download.csdn.net/detail/musicvs/4948713
    0回复
  • a413307 2013-02-22 14:58:00

    博主 真给力
    0回复
  • musicvs 2013-02-22 17:14:00

    [reply]a413307[/reply]
    有你们支持,当然要给力了~哈哈
    0回复
发表评论
粤ICP备16043700号

本博客基于 BlazorAnt Design Blazor 开发