cocos2d-Lua01Lua基础语法
来源:互联网 发布:js 数组变量 编辑:程序博客网 时间:2024/06/05 17:45
一、第一个Lua程序
- -- 通过 print 打印, 可以使用 print 是因为 C 库中有该方法,当看见 paint
- -- 就去C里调用 print 方法
- -- 注 Lua 语句后面不加 ; 号, 加了也不报错
- -- Lua 中没有{ } 花括号, 因为C代码中没有对{ }进行编译,不认识
- print"Hello lua"
- localfunction myfunc3(var )
- returnvar
- end
- print( myfunc3(3456))
2.1 问题
本案例依次演示lua中的流程,包括ifelse判断语句、for循环语句以及while循环语句等。
2.2 方案
Lua中的条件判断语句没有{ }花括号,使用关键字then和end代替,then和end就相当与花括号。
Lua中的for循环表达式的规定如下:
Lua中的while循环没有花括号,取而代之的是关键字do和end。repeat和until相当于别的语言中do-while,repeat 后面不需要do。
2.3 步骤
实现此案例需要按照如下步骤进行。
步骤一:条件判断语句
使用开发工具SublimeText2新建一个lua文件,完成一个if判断语句和ifelse判断语句,Lua中的特殊符号组合:==、>、<、>=、<=、~=(不等于),代码如下所示:
- if x== 15 then
- print("x's value is 15")
- end
- --完整的if else 语句块
- x = 13
- if x== 15 then
- print("x's value is 15")
- elseif x== 12 then
- print("x's value is 12")
- else
- print("x's value is "..x)
- end
步骤二:循环语句
使用开发工具SublimeText2新建一个lua文件,使用while循环遍历一个table数据,代码如下所示:
- m_table = {10, 2, 3}
- locali = 1
- whilem_table[i] do
- print (m_table[i])
- i = i + 1
- end
然后使用repeat和until语句依次输出x的值,代码如下所示:
- -- repeat (相当于 do while 循环但是有点不一样是满足条件退出)
- local x = 1
- repeat
- print ("x value is " ..x)
- x = x + 1
- until x == 8
编辑器中的效果和控制台输出结果如图-9、图-10所示:
图-9
图-10
使用for循环遍历表中的数据,代码如下所示:
- --如果第三个值是递增,第二个值就是最大值,如果i>最大值跳出循环; 第三个值 2 是每次递增的值,
- --如果不写的话默认是每次递增 1
- fori = 1, 4, 3 do
- print ("i value is "..i)
- end
- --如果第三个值是递减,第二个值就是最小值,如果i<最小值跳出循环; 第三个值 -2 是每次递减的值,
- fori = 15, 1, -1 do
- print ("i value is "..i)
- end
- -- 遍历表中所有元素(#m_table求出表中元素个数,相当与count)
- fori=1, #m_table, 1 do
- print(m_table[i])
- end
编辑器中的效果如图-11所示:
图-11
2.4 完整代码
本案例中,完整代码如下所示:
- if x == 15 then
- print ("x's value is 15")
- end
- --完整的 if else 语句块
- x = 13
- if x == 15 then
- print ("x's value is 15")
- elseif x == 12 then
- print ("x's value is 12")
- else
- print ("x's value is "..x)
- end
- -- while 练习
- m_table = {10, 2, 3}
- locali = 1
- whilem_table[i] do
- print (m_table[i])
- i = i + 1
- end
- -- repeat (相当于 do while 循环 但是有点不一样 是满足条件退出)
- local x = 1
- repeat
- print ("x value is " ..x)
- x = x + 1
- until x == 8
- --for
- --如果第三个值是递增,第二个值就是最大值,如果i>最大值跳出循环; 第三个值 2 是每次递增的值,
- --如果不写的话默认是 每次递增 1
- fori = 1, 4, 3 do
- print ("i value is "..i)
- end
- --如果第三个值是递减,第二个值就是最小值,如果i<最小值跳出循环; 第三个值 -2 是每次递减的值,
- fori = 15, 1, -1 do
- print ("i value is "..i)
- end
- -- 遍历表中所有元素 (#m_table 求出表中元素个数,相当与count)
- fori=1, #m_table, 1 do
- print(m_table[i])
- end
隐藏
3 Lua中的函数
3.1 问题
本案例依次演示lua中的不同类型的函数,包括无参数、有参数、有参数有返回值、多个返回值以及可变长参数函数等。
3.2 方案
Lua中函数的定义:
3)参数不需要参数类型;
4)如果函数需要别Lua文件调用,不需要加 local 关键字,如果不想别的Lua文件调用,最好号加上local关键字;
5)函数用关键字end结尾。
3.3 步骤
实现此案例需要按照如下步骤进行。
步骤一:无参数函数
使用开发工具SublimeText2新建一个lua文件,定义一个无参数的函数,代码如下所示:
- local function myfunc1()
- print ("myfunc1")
- end
- myfunc1()
运行程序控制台输出“myfunc1”,编辑器中的效果如图-12所示:
图-12
步骤二:有参数函数
使用开发工具SublimeText2新建一个lua文件,定义一个有参数的函数,代码如下所示:
- local function myfunc2( var )
- print ("myfunc2 --> "..var)
- end
- myfunc2("Hello")
运行程序控制台输出“myfunc2 --> Hello”,编辑器中的效果如图-13所示:
图-13
步骤三:有参数有返回值函数
使用开发工具SublimeText2新建一个lua文件,定义一个有参数有返回值的函数,代码如下所示:
- --有参数有返回值
- local function myfunc3( var )
- returnvar
- end
- print ( myfunc3(3456) )
运行程序控制台输出“3546”,编辑器中的效果如图-14所示:
图-14
步骤四:多个返回值函数
使用开发工具SublimeText2新建一个lua文件,定义一个多个返回值的函数,代码如下所示:
- --有两个返回值Lua中的函数支持多返回值
- local function myfunc4()
- return 5, 10
- end
- local x, y = myfunc4()
- print ("x = " ..x .." y = " .. y)
运行程序控制台输出“x = 5 y = 10”,编辑器中的效果如图-15所示:
图-15
步骤五:可变长参数函数
使用开发工具SublimeText2新建一个lua文件,定义一个可变长参数的函数,参数的下标从1开始,代码如下所示:
- --可变长参数Lua中下标从 1 开始,而不是大多数语言的从 0 开始
- local function myfunc5(...)
- --遍历参数用 Table 接受
- localmyTable = {...}
- fork,v in pairs(myTable) do
- print(k,v)
- end
- print("get value is " ..myTable[1])
- end
- myfunc5("zzzz", "sdfa", 11223)
运行程序控制台输出“1 zzzz2 sdfa3 11223”,编辑器中的效果如图-16所示:
图-16
3.4 完整代码
本案例中,完整代码如下所示:
- --Lua中的函数
- --无参数
- local function myfunc1()
- print ("myfunc1")
- end
- myfunc1()
- --有参数
- local function myfunc2( var )
- print ("myfunc2 --> "..var)
- end
- myfunc2("Hello")
- --有参数 有返回值
- local function myfunc3( var )
- returnvar
- end
- print ( myfunc3(3456) )
- --有两个返回值 Lua中的函数支持多返回值
- local function myfunc4()
- return 5, 10
- end
- local x, y = myfunc4()
- print ("x = " ..x .." y = " .. y)
- --可变长参数 Lua中下标从 1 开始,而不是大多数语言的 从 0 开始
- local function myfunc5(...)
- --遍历参数 用 Table 接受
- localmyTable = {...}
- fork,v in pairs(myTable) do
- print(k,v)
- end
- print("get value is " ..myTable[1])
- end
- myfunc5("zzzz", "sdfa", 11223)
4 Table的使用
4.1 问题
在别的编程语言中会有容器、数组、集合、链表等,Lua中的table就是一个数据的集合,本案例演示table的使用,包括table的创建、table的遍历以及table的使用。
4.2 方案
首先创建一个table,然后使用for循环遍历table,通过#获取table的长度。
然后安装免费的编程工具SublimeText2,如果要开发lua选择 Tools –> Build System -> New Build System重新开启一个文件,新建一个lua编辑器。
最后重新打开 Sublime Text 2 工具,创建文件并保存为a.lua,输入print ("Hello Lua")并保存,使用快捷键command + B运行程序,下方控制台会输出“Hello Lua”。注意:a.lua所在路径不能出现中文,只能是英文的路径,否则无法显示输出结果。
4.3 步骤
实现此案例需要按照如下步骤进行。
步骤一:遍历table
首先创建一个table类型的数据TrTable,然后使用for循环遍历TrTable,通过#TrTable获取table的长度,Lua中table 的索引是从1开始的而不是0。table 的访问和其他语言中的数组访问方式很类似,代码如下所示:
- --建立一个空的table
- TrTable = {}
- --建立一个有数据的table
- TrTable = {
- 1,
- 2,
- 3,
- 4
- }
- --遍历 table (#mytable2 是获取 table 的长度)
- fori=1, #TrTable do
- print(TrTable[i])
- end
编辑器中的效果如图-1所示:
图-1
控制台中输出的结果如图-2所示:
图-2
table 中的变量类型可以是数值类型也可以是字符串类型,代码如下所示:
- TrTable = {
- 1,
- 2,
- 3,
- 4,
- "Hello Tarena !",
- 5
- }
编辑器中的效果如图-3所示:
图-3
控制台中输出的结果如图-4所示:
图-4
步骤二:在table 中添加另外一个 table
在table中添加另外一个table,代码如下所示:
- --在 table 中添加另外一个 table
- TrTable = {
- 1,
- 2,
- 3,
- "Tarena",
- TrTable1 = {4, 5, 6, 7},
- "Hello Lua",
- }
遍历TrTable,TrTable1 = {4, 5, 6, 7}不能输出,因为table的一个特性遍历时按一个顺序来的,如果是一个对象的话不会输出,但是 "Hello Lua" 能输出,因为这时的 "Hello Lua" 的索引是5,代码如下所示:
- --在 table 中添加另外一个 table
- TrTable = {
- 1,
- 2,
- 3,
- "Tarena",
- TrTable1 = {4, 5, 6, 7},
- "Hello Lua",
- }
- --遍历table (#mytable2 是获取 table 的长度)
- fori=1, #TrTable do
- print(TrTable[i])
- end
编辑器中的效果如图-5所示:
图-5
控制台中的输出结果如图-6所示:
图-6
步骤三:table的三种遍历方式
第一种方式只能遍历索引连续的元素,如元素不是数值类型或字符串,那么不会添加索引,代码如下所示:
- TrTable = {
- k = 200,
- 2,
- 3,
- 4,
- TrTable1 = {1, 2},
- x = 500,
- 5,
- }
- fori = 1, #TrTable do
- print ("value is " ..TrTable[i])
- end
编辑器中的效果如图-7所示:
图-7
控制台中的输出结果如图-8所示:
图-8
第二种方式ipairs只获取自然索引的元素,和普通for的结果是一样的,都是按照当前的自然索引来取值的,如果table中存放的是数值类型或字符串,table会自动生成自然索引,代码如下所示:
- fori,v in ipairs(TrTable) do
- print(i,v)
- end
编辑器中的效果如图-9所示:
图-9
控制台中的输出结果如图-10所示:
图-10
第三种方式pairs通过key获取的元素,table是一个指针,代码如下所示:
- fork,v in pairs(TrTable) do
- print(k,v)
- end
编辑器中的效果如图-11所示:
图-11
控制台中的输出结果如图-12所示:
图-12
4.4 完整代码
本案例中,完整代码如下所示:
- --建立一个空的table
- TrTable = {}
- --建立一个有数据的table
- TrTable = {
- 1,
- 2,
- 3,
- 4
- }
- --遍历 table (#mytable2 是获取 table 的长度)
- fori=1, #TrTable do
- print(TrTable[i])
- end
- --table中的变量类型可以是数值类型也可以是字符串类型
- TrTable = {
- 1,
- 2,
- 3,
- 4,
- "Hello Tarena !",
- 5
- }
- --遍历 table (#mytable2 是获取 table 的长度)
- fori=1, #TrTable do
- print(TrTable[i])
- end
- --在 table 中 添加另外一个 table
- TrTable = {
- 1,
- 2,
- 3,
- "Tarena",
- TrTable1 = {4, 5, 6, 7},
- "Hello Lua",
- }
- --遍历table (#mytable2 是获取 table 的长度)
- fori=1, #TrTable do
- print(TrTable[i])
- end
- --[[TrTable1 = {4, 5, 6, 7}不能输出,因为table的一个特性,
- 遍历时按一个顺序来的,如果是一个对象的话不会输出.
- 但是 "Hello Lua" 能输出,因为这时的 "Hello Lua" 的索引是 5]]
- --table 中可以直接给变量赋值
- TrTable = {
- k = 12
- }
- print (TrTable[k])
- --[[这里输出为 nil 是因为在 TrTable 中找不到 索引 k 位置。
- 而 TrTable 中的 k 实际上是 key。
- ]]
- print (TrTable["k"])
- --正常打印是因为 会通过 "k"(key) 找到所在的索引 然后输出
- print (TrTable.k)
- -- 这里的 TrTable.k 等价于 TrTable["k"]
- --[[ TrTable[tr] 以变量 tr 的值做为 table 的索引 ]]
- tr = 100
- TrTable[tr] = 500;
- print (TrTable[tr])
- --table三种遍历方式
- -- 第一种遍历方式
- --[[该方式只能遍历索引连续的元素, 如元素不是 数值类型 或 字符串,那么不会添加索引]]
- TrTable = {
- k = 200,
- 2,
- 3,
- 4,
- TrTable1 = {1, 2},
- x = 500,
- 5,
- }
- fori = 1, #TrTable do
- print ("value is " ..TrTable[i])
- end
- -- 第二种遍历方式
- --[[ foripairsi:indexv:value
- ipairs:只获取 自然索引的元素 ,和普通 for 的结果是一样的,
- 都是按照当前的自然索引来取值的]]
- fori,v in ipairs(TrTable) do
- print(i,v)
- end
- --[[ 自然索引:如果 table 中存放的是 数值类型 或 字符串, table会自动生成自然索引]]
- print ("=====================================")
- print "====================================="
- -- 第三种遍历方式
- --[[ for pairs k:keyv:value
- pairs:通过key获取的元素 ]]
- fork,v in pairs(TrTable) do
- print(k,v)
- end
- --[[ TrTable1 table: 0x7f9d684084c0 是一个地址,也就是说 table 是一个指针]]
--------------------------------------------------------------------源自某内笔记--------------------------------------------------
- cocos2d-Lua01Lua基础语法
- Cocos2d-x 3.0- 脚本编程-Lua语法基础
- cocos2d基础
- cocos2d基础
- Cocos2d-Lua语法
- VBA语法-基础语法
- Cocos2d-x 3.0final 终结者系列教程19脚本编程-Lua语法基础
- Cocos2d-x 3.0final 终结者系列教程19脚本编程-Lua语法基础
- 基础语法
- 基础语法
- 基础语法
- 基础语法
- 基础语法
- 基础语法
- 基础语法
- 基础语法
- 基础语法
- 语法基础
- Bzoj2084:[Poi2010]Antisymmetry:manachar算法
- 检查OGG占用端口的命令
- C/C++不同文件夹下包含头文件的方法及#include的使用
- CSP考试 2015年03月第5题 C语言实现
- 在程序中表示负无穷大的数
- cocos2d-Lua01Lua基础语法
- 【CodeForces】[614A]Link/Cut Tree
- OGG孤儿server进程的检查与处理
- Java 实例升级篇
- Red Hat Enterprise Linux Server 7.1 x86_64 下载
- cocos2d-Lua02Lua面向对象
- U盘作为启动盘的重装系统教程
- 百思不得姐自定义TabBar
- 【杭电】[2083]简易版之最短距离