Cocos2d-x Lua脚本基本语法

来源:互联网 发布:js 时间戳比较 编辑:程序博客网 时间:2024/06/07 02:30

 欢迎加入 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(4 and 5--输出 5
   print(nil and 13--输出 nil
    print(false and 13--输出 false
   print(4 or 5--输出 4
    print(false or 5--输出 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

     例如:if 1+1==2 then print("true")
             elseif 1+1~=2 then print("false")
             else print("true"end 

     --repeat -until 语句

     repeat

          ...

     until 条件;

     repeat语句类似于do-while语句

     例如:repeat print("hello") until 1+1~=2

       --for 循环语句

           Lua的for循环分为两种形式,一种为数值循环,另外一种为泛型循环

        --数值循环 

               for var = exp1,exp2,exp3   do

           .......

              end    

              例如:for i = 1102 do print(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

        例如:while 1+1~=2 do print("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)多返回值

            function s()
     
 return 1,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()