Cocos2d-x Lua脚本基本语法
转载时请注明原文出处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 关键字保留 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语言区别特别大。 print(4and5)--输出5 (4)链接运算符 .. --两个点 连接两个字符串,可以用".."运处符。如: 运算符优先级 高——低 ^ not - (一元运算) * / + - .. < > <= >= ~= == and or 4.语句 (1)赋值语句 需要注意的是:当变量个数大于值的个数,将会按变量个数补足nil 当变量个数小于值的个数,多余的值会被忽略 (2)全局变量与局部变量 在默认情况下,变量总是认为是全局的。假如需要定义局部变量,则在第一次赋值的时候,需要用local说明。比如: 与全局变量相比,局部变量还存在以下优势:访问速度更快 不会出现名字的访问冲突 (3)控制语句 --if语句,共有三种形式 if 条件 then...end if 条件 then...else...end if 条件 then... elseif 条件 then... (可以多个elseif)end 例如:if1+1==2thenprint("true") --repeat -until 语句 repeat ... until 条件; repeat语句类似于do-while语句 例如:repeatprint("hello")until1+~=2 --for 循环语句 Lua的for循环分为两种形式,一种为数值循环,另外一种为泛型循环 --数值循环 for var = exp1,exp2,exp3 do ....... end 例如:fori=1,102doprint(i)end for语句执行时,i的初值为1,每次循环i值+2,直到i值加到10,若exp3部分省略,则默认每次加1,如果要退出循环,可使用break语句。 --泛型循环 for 变量1,变量2,... 变量n in 表或枚举函数 do ... end 例如:--输出表中所有的key fork in pairs(t)doprint(k)end --While while 条件 do ... end 例如:while1+1~=2doprint("true")end 5.函数 在Lua中,使用function来定义一个函数,在编码过程中,函数可以被当做变量使用。 function 函数名 (参数列表) 函数体 end; Lua函数的特征 (1)可变参数 开发者可以使用“ ... ”表示可变的参数,Lua会将函数的参数放在一个叫arg的表中,此表除了包含参数,还有一个域n的数值表示参数的个数 例如:function f(a,...) end f(1,2,3,4) --a=1,b=2,arg={3,4;n=2} (2)多返回值 functions() end a,d=s()此时,a=1,c=3,d=4,函数被当做了赋值表达式 函数作为调用语句时,例如:print(s()) --此时会输出1,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() (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |