欢迎加入
Cocos2d-x 交流群:193411763
转载时请注明原文出处http://blog.csdn.net/u012945598
该篇文章的内容仅仅是为了更好的在Cocos2d-x引擎中使用Lua提前储备一些关于Lua的语法知识,若要深入了解Lua请阅读专门书籍。
1.Lua 基本数据类型
nil 空
boolean 布尔类型
number 数值类型
string 字符串类型
userdata 自定义类型 这个类型专门用来和Lua的宿主打交道的。
function 函数类型 所有的函数,本身就是一个变量。
thread 线程类型
table 表类型
Lua是一种动态弱类型语言,灵活性十分强大,变量没有类型定义也可以使用。例如在Hello.lua的文件中声明一个变量:
myName="Lua" --无需写出myName变量的类型
myName=20
myName=print --此处将function函数赋给了变量,C/C++中无此功能,在某些情况下可以带来便利,比如nil类型
注意 “--”是Lua中的单行注释法,相当于C/C++中的 “//”,多行注释则使用"--[[ --]]",相当于/* */
在Lua中提供了一个函数type,专门用来测试给定变量或者值的类型。使用方法如下:
print(type(nil)) --空类型
print(type(true)) --布尔类型
print(type("Hello world")) --字符串类型
print(type(print)) --函数类型
上述数据类型中有一个表类型(table),这是一种强大的数据结构,也是Lua中唯一的一种数据结构。我们可以将它看做类似数组或容器的存在,只不过相对于C/C++中的数组,table更为灵活。例如,C语言中的数组只能用正整数作为索引,而table可以用任何东西做索引(nil除外),不限于数字;在C语言中,数组中的元素必须是相同类型的,而在Lua中,table可以存放任意类型的值(nil除外)。下面我们来定义一个table:
helloTable={ } --定义一个空表
helloTable[1]=25 --类似于C语言中使用数组的方法
helloTable={name="reventon",IQ=127}
此行代码可看成:
helloTable={ } --必须先定义成一个表,因为未定义的变量属于nil类型
helloTable["name"]="reventon"
helloTable["IQ"]=127
当索引字符串的时候,我们可以简写成:
helloTable.IQ=127
helloTable.name="reventon"
定义表的时候我们可以把全部的数据写在"{ }"之间,例如:
hellotable={
10, --此时索引值默认为[1],相当于[1]=10,元素之间需要用“ ,”隔开
[100]=20, --索引[100]的值是20,所有的索引值都需要用“'[ ]”括起来,字符串除外
You={ --字符串索引可以去掉引号及中括号
Age = 30, --字符串索引也可以写成 ["Age"]=30
IQ=12
},
20 --相当于[2]=20,索引被默认成了数字,从1向后排
}
2. Lua 关键字保留
Lua脚本语言是大小写敏感的,保留字如下:
and break do else elseif end false for function if in local nil not or repeat return then true until while
3. 表达式
Lua中有四种运算符
(1) 算术运算符(只能用于数字类型当中)
加 + 减(负值) - 乘 * 除 /
幂运算 ^ 例如: 2^3的结果为8 3^3的结果为9
(2)关系运算符
返回结果均为true / false,若比较时两个值的类型不同,返回的结果一定为false,nil类型只能与自己相等。
> < <= >= == ~=(相当于C中的!=)
(3)逻辑运算符
and or not
and 和 or 与C语言区别特别大。
在Lua中,只有false和nil才计算为false,其它任何数据都计算为true,0也是true!
and 和 or的运算结果不是true和false,而是和它的两个操作数相关。
a and b:如果a为false,则返回a;否则返回b
a or b:如果 a 为true,则返回a;否则返回b
print(4and5)--输出5
print(niland13)--输出nil
print(falseand13)--输出false
print(4or5)--输出4
print(falseor5)--输出5
(4)链接运算符
.. --两个点
连接两个字符串,可以用".."运处符。如:
"This a " .. "string." -- 等于 "this a string"
运算符优先级 高——低
^
not - (一元运算)
* /
+ -
..
< > <= >= ~= ==
and
or
4.语句
(1)赋值语句
赋值语句在Lua被强化了。它可以同时给多个变量赋值。
例如:
a,b,c,d=1,2,3,4
甚至是:
a,b=b,a -- 交换变量
a[i],a[j] = a[j],a[i]
需要注意的是:当变量个数大于值的个数,将会按变量个数补足nil
当变量个数小于值的个数,多余的值会被忽略
(2)全局变量与局部变量
在默认情况下,变量总是认为是全局的。假如需要定义局部变量,则在第一次赋值的时候,需要用local说明。比如:
local a,b,c = 1,2,3 -- a,b,c都是局部变量
与全局变量相比,局部变量还存在以下优势:访问速度更快
不会出现名字的访问冲突
(3)控制语句
--if语句,共有三种形式
if 条件 then...end
if 条件 then...else...end
if 条件 then... elseif 条件 then... (可以多个elseif)end
例如:if1+1==2thenprint("true")
elseif1+1~=2thenprint("false")
elseprint("true")end
--repeat -until 语句
repeat
...
until 条件;
repeat语句类似于do-while语句
例如:repeatprint("hello")until1+1~=2
--for 循环语句
Lua的for循环分为两种形式,一种为数值循环,另外一种为泛型循环
--数值循环
for var = exp1,exp2,exp3 do
.......
end
例如:fori=1,10,2doprint(i)end
for语句执行时,i的初值为1,每次循环i值+2,直到i值加到10,若exp3部分省略,则默认每次加1,如果要退出循环,可使用break语句。
--泛型循环
for 变量1, 变量2,
... 变量n in 表或枚举函数 do ... end
例如:--输出表中所有的key
for
k in pairs(t) do print(k)end
--While
while 条件 do ... end
例如:while1+1~=2doprint("true")end
5.函数
在Lua中,使用function来定义一个函数,在编码过程中,函数可以被当做变量使用。
function 函数名 (参数列表)
函数体
end;
Lua函数的特征
(1)可变参数
开发者可以使用“ ... ”表示可变的参数,Lua会将函数的参数放在一个叫arg的表中,此表除了包含参数,还有一个域n的数值表示参数的个数
例如:function f(a,b,...) end
f(1,2,3,4) --a=1,b=2,arg={3,4;n=2}
(2)多返回值
functions()
return1,2,3,4
end
a,b,c,d=s()--此时,a=1,b=2,c=3,d=4,函数被当做了赋值表达式
函数作为调用语句时,例如:print(s())
--此时会输出1,2,3,4
print(s(),1) --1,1
print(s() .. "x") -- ax
函数用于表构造初始化,例如:a={s()} --a{'1','2','3','4'}
由此可以看出
当函数调用作为赋值表达式最后一个函数,或者仅有一个参数时,Lua会根据函数返回值个数去返回,其他的情况函数调用仅返回第一个参数。
在函数仅仅被用作调用语句时,或者用于表构造函数中的初始化时,也于多赋值值是相同的。多余的部分丢弃,多余的部分则用nil补充。
可以使用圆括号强制函数只返回一个值,例如 print((s()))
--a
函数调用的方式有两种,一种是 fun:s()
另一种是
fun.s()
分享到:
相关推荐
资源名称:Cocos2d-x实战:JS卷——Cocos2d-JS开发内容简介:本书是介绍Cocos2d-x游戏编程和开发技术书籍,介绍了使用Cocos2d-JS中核心类、瓦片地图、物理引擎、音乐音效、数据持久化、网络通信、性能优化、多平台...
Cocos2d-x之LUA脚本引擎深入分析
cocos2d-x+lua游戏demo源码 xcode工程
cocos2d-x进阶教程1_1搭建和配置Lua开发环境.mp4 cocos2d-x进阶教程1_2编写自己的Lua版本的HelloWorld.mp4 cocos2d-x进阶教程1_3Lua语言的注释、变量、语句块.mp4 cocos2d-x进阶教程1_4Lua中函数、条件判断语句.mp4 ...
cocos2d-x-2.1.5
ShareSDK Android接入cocos2d-X lua文档
在使用cocos2d-x开发游戏的过程中,为了实现逻辑和显示相分离。 在下通宵了一个晚上,写出了该事件类。 谨记,该事件只能用于cocos2d-x中。 事件发送者需要继承EventDispatcher类 事件接收者需要继承EventHandle类...
木头Cocos2d-x教程 Lua篇 Demo源代码。 教程地址: 第1章:http://blog.csdn.net/musicvs/article/details/8440707 第2章:http://blog.csdn.net/musicvs/article/details/8440919 第3章:...
Cocos2d-x中使用Lua脚本的初步使用,在Cocos2d-x中访问Lua脚本中的变量
资源名称:大富翁手机游戏开发实战基于Cocos2d-x3.2引擎内容简介:李德国编著的《大富翁手机游戏开发实战(基于 Cocos2d-x3.2引擎)》使用Cocos2d-x游戏引擎技术,带领读者一步一步从零开始进行大富翁移动游戏的开发...
Cocos2d-x是移动跨平台开发最流行的游戏引擎,而本书是一本很全面的、比较‘接地气’的游戏开发教程。书中汇聚了热门手机游戏《捕鱼达人》开发的实战经验,作者从最基础的内容开始,逐步深入地介绍了Cocos2d-x的相关...
最新版的cocos2d-x实战 lua卷,分享给大家
《Cocos2d-x实战 Lua卷》是介绍Cocos2d-x Lua游戏编程和开发技术的书籍,本书是第1版,带完整书签
Cocos2d-Lua社区Cocos2d-Lua-Community是Cocos2d-x 4.0的改进,并且易于使用Lua游戏引擎。 它是与Quick-Cocos2dx-Community v3.7.x兼容的Lua“框架”。得到帮助 QQ群:社区版千人群(1群)号:361920466社区版2群:...
《Cocos2D-X游戏开发技术精解》详细介绍如何使用Cocos2D-X引擎开发自己的移动平台游戏。全书共15章,主要内容包括:Cocos2D-X引擎简介;如何建立跨平台的开发环境;引擎的核心模块——渲染框架;如何实现动态画面和...
cocos2d-x-3.2下载,不多说。或者可以下载另一个资源 cocos引擎老版本集合(cocos2d-x-2.2.1 - 3.5) http://download.csdn.net/download/crazymagicdc/9982656
cocos2d-x实战项目 01.cocos2d-x原理及环境配置.rar 03.cocostudio使用方法及UI控制.rar 04.XML文件读取与骨骼动画.rarcocos2d-x实战项目 01.cocos2d-x原理及环境配置.rar 03.cocostudio使用方法及UI控制.rar 04.XML...
coocs2d核心编程代码。。。lua。。游戏开发,包含各种核心编程第二版demo
资源名称:Cocos2D-X游戏开发技术精解内容简介:Cocos2D-X是一款支持多平台的 2D手机游戏引擎,支持iOS、Android、BlackBerry等众多平台。当前,很多移动平台流行的游戏,都是基于Cocos2D-X开发的。 《Cocos2D-X...
shader编写,在lua层实现卡牌搓牌带3D弧边搓牌、翻牌效果。