笨木头  2013-06-04 23:04     Cocos2d-x Lua     阅读(21057)     评论(13)
转载请注明,原文地址: http://www.benmutou.com/archives/627
文章来源:笨木头与游戏开发
之前对于Lua的研究都是纸上谈兵,没有真正的项目练手,现在公司的项目基本上都是用Lua开发,是时候补充一下我那蹩脚的Lua知识了。

基础数据类型、表达式、循环结构什么的我就不说了,这么简单的东西说了也要被大家喷。

今天我想说说table的几种构造方式。

 

本文来自[笨木头与游戏开发],笨木头花心奉献,花心?不呢,是用心。

转载请注明,原文地址:http://www.benmutou.com/archives/627

 

0.Lua调试工具——LuaEditor

首先,如果你是第一次接触Lua,请补充一下Lua的最基本之中的基础语法(小若:O O!),然后下载一个LuaEditor工具,用来查看Lua执行效果,当然也可以调试,本篇内容不解释这个工具。下载地址:http://www.bego.cc/file/22357242 当然,也可以百度一下。

1.什么是table?

table是Lua最复杂最强大的数据结构,Lua本身并不是面向对象语言,但是对面向对象中毒比较深的程序员,可以借助table"完美"地模拟面向对象编程。最简单地,我们可以把table理解为数组,最复杂的,我们可以把table理解为"世间万物",因为它可以创造出很多你想象不到的东西。一个字,自由度非常大~!(小若:一个字,你妹~!)

 

2.如何创建一个table?

创建table是一件很复杂的事情,不知道大家顶不顶得住,试试看,如下:

[cce_cpp]

local a = {}

[/cce_cpp]

这样就创建了一个table了。

(小若:噗,真够复杂的...啊,你妹啊,复杂你个头!)

 

3.如何初始化一个table

嗷,虽然创建table已经很复杂了,更复杂的还在后面,怎么初始化table?看看下面的代码:

[cce_cpp]

local a = {["x"] = 12, ["mutou"] = 99, [3] = "hello"}

print(a["x"]);

[/cce_cpp]

在LuaEditor中创建一个lua文件,输入以上代码,保存,然后按F5运行,我们将看到输出窗口输出了一个数字:12。 这挺神奇的,感觉就像是在定义数组,不是吗? table间的元素用逗号分隔,["x"] = 12代表构造一个table元素,下标为"x",值为12。(小若:为毛数组下标可以是字符串?)

嗷~!我就等旁白问这个问题,旁白你笨蛋啊,我只是说table像数组,我没有说它就是数组,table支持几乎是所有类型的下标,包括函数。 (小若:。。。以后我不会中计了,喵...) 4.有更简洁的方式 这种初始化方式看起来太复杂了,有没有简单点的?看看下面的代码:

[cce_cpp] local a = {x = 12, mutou = 99, [3] = "hello"}

print(a["x"]); [/cce_cpp]

运行结果仍然是输出12,也就是说,对于字符串下标,我们可以省略方框和双引号,但是数字下标不可以,千万不要搞混了。 但是,a["x"]这种调用方式也很烦人不是吗?程序员都很懒的,所以Lua支持一下这种方式的调用:

[cce_cpp] local a = {x = 12, mutou = 99, [3] = "hello"}

print(a.x); [/cce_cpp]

输出结果仍然是12,也就是说,对于字符串下标,可以直接用a.x的形式调用,也是省略了方框和双引号,初始化和调用方式的规则一样,这样大家就不会搞混了,记住,是字符串下标才这么做。 记住,是字符串下标才这么做。 记住,是字符串下标才这么做。(小若:你再说一句试试,我保证以后不帮你吐槽。)

 

5.想要默认数字索引怎么办? 如果说,大家习惯了数组,用数字下标,又不想自己一个个数字地定义,比如:

[cce_cpp] local a = {[1] = 12, [2] = 43, [3] = 45, [4] = 90} [/cce_cpp]

没关系,Lua又为爱偷懒的程序员提供了一招,如下:

[cce_cpp] local a = {12, 43, 45, 90} print(a[1]); [/cce_cpp]

看看a[1]输出的值是不是12?(小若:但是12的下标应该是0啊,数组下标是从0开始计算的) 再一次警告旁白,table类似数组,但它绝对不是数组。 table默认的第一个索引下标是1,并且很多相关的函数也假设table的第一个索引下标为1,所以大家最好遵守这个规则。

 

6.更强大的应用之table的table table什么都能放,当然也能放table了,如下:

[cce_cpp]</pre> local a = { {x = 1, y = 2}, {x = 3, y = 10} } print(a[1].x); <pre>[/cce_cpp]

我们定义了一个table,命名为a,table有两个元素,分别是两个没有名字的table,根据第5条所说的规则,没有显示指定下标,那Lua就会默认给table的元素赋予下标(从1开始)。 因此,a的第一个元素就是{x = 1, y = 2},调用a的第一个元素的方式为:a[1] 由于a[1]又是一个table,所以,再次调用table的x下标的值:a[1].x 这样就OK了。

 

7.更强大的应用之函数下标

我们最后来试试更好玩的,用一个函数当table的下标:

[cce_cpp]</pre> function test() print("Hello Table"); end

local a = {[test] = 1} print(a[test]); <pre>[/cce_cpp]

定义了一个函数test,然后用test作为下标定义了table的一个元素,值为1。 这很奇怪不是吗?但是有时候这样确实很有用,这里暂时不解释。

OK,关于table的构造方式,暂时说这么多,有点累了,晚安。
13 条评论
  • skype download 2015-03-11 09:05:41

    skype free download

    download skype
    0回复
  • java runtime 2015-03-10 05:25:36

    java test

    java updates
    0回复
  • mozilla firefox free download 2015-03-09 12:22:07

    firefox download windows 7

    download firefox
    0回复
  • download chrome 2015-03-09 05:12:23

    Google Chrome Download Free

    Free Download Google
    0回复
  • Vanessa Smith 2015-03-08 04:52:15

    I liked your blog very much.

    I want to thank you for the contribution.
    0回复
  • 修罗的美丽人生 2014-12-08 14:24:49

    你好啊,你一般写逻辑时,lua调用c++代码的时候多么?因为上一个项目很多类都是c++写的,我想重用,那这种情况,是重写成lua版的好,还是用lua调用c++的好呢?
    0回复
    • 博主 糟糕_树叶的mut 2014-12-08 19:31:32

      用的比较少,可能一些网络模块用到C++的,其他的逻辑还是在Lua上的。如果你们的项目代码不多,可能重写比较好。代码多的话,只好Lua-binding来调用C++了。但是这样对于热更新就有点麻烦,如果C++的代码要修改的话,就不能只更新Lua了
      0回复
  • Cocos2d-x Lua 读取Csv文件,更方便的使用数据 | 笨木头与游戏开发 2014-07-31 22:00:13

    […] 巧说table的几种构造方式:http://www.benmutou.com/archives/627  […]
    0回复
  • Oo幻想oO 2013-10-06 12:22:19

    luaeditor的确不错,可是没有cocos的函数提醒神马的,有很多缺陷,新版本的luastudio可惜没钱……decoda调试的时候查看变量游戏就报错,luaeditor调试的时候变量的子变量又不能查看啊……我现在是用sublime来敲代码,装了很多插件感觉用起来还不错,可就是没有luaeditor的函数可视化窗口啊……没有补全那是不让我活啊……
    0回复
    • 博主 糟糕_树叶的mut 2013-10-06 16:51:30

      确实没有补全很累,没办法了,lua确实不错,某些方面也让人纠结
      0回复
      • 博主 糟糕_树叶的mut 2013-12-04 11:23:25

        它最明显的作用就是可以在线更新游戏逻辑,而不需要玩家重新下载新的安装包,因为脚本就是文件,直接在线下载替换文件就可以了~不过我也很少用Lua了,最近都是直接用C++ 一般现在公司做网游都是lua了
        0回复
  • mallot psg 2013 2013-07-04 10:18:41

    mallot psg 2013...

    Jayce Bartok is an actor/producer/writer/director who runs Vinyl Foote Productions from Brooklyn with his spouse Tiffany.....
    0回复
  • 【笨木头Lua专栏】基础补充01:巧说table的几种构造方式 | 泰然 - 专注游戏开发 Cocos2d-x教程社区 游戏引擎研究 iPhone游戏开发社区 跨平台解决方案 2013-06-16 02:32:18

    [...] 转载请注明,原文地址:http://www.benmutou.com/blog/archives/627 [...]
    0回复
发表评论
粤ICP备16043700号

本博客基于 BlazorAnt Design Blazor 开发