《Cocos2d-x之Lua核心编程》读书笔记:Lua基础

前端之家收集整理的这篇文章主要介绍了《Cocos2d-x之Lua核心编程》读书笔记:Lua基础前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

Lua编程

三类用户

@H_301_5@
  • 需要一门简单的脚步语言嵌入到应用程序中的开发者
  • 想要提高c/c++语言开发者
  • 想要提高运行效率的脚步开发者
  • @H_404_12@

    特点

    @H_301_5@
  • 易嵌入,可以方便的与c/c++编写的游戏逻辑互相调用
  • 简单,不涉及任何复杂的编程概念,麻雀虽小五脏俱全
  • 轻量,库体积很小,只有几百字节
  • 易学习,游戏策划也能使用
  • 性能,对比c/c++其带来的性能损失可以忽略不计
  • @H_404_12@

    Lua语法

    命名规范

    这个与C语言基本一样。

    类型与值

    8中基础类型:
    - nil—–空
    - boolean——布尔
    - number—-数字
    - string—-字符串
    - function—-函数
    - table—-表
    - userdata—-自定义数据类型
    - thread—–线程

    code

    --lua
    function show_type(var) print(type(var)) end show_type(var) var = 10 show_type(var) var = "Hello world" show_type(var) var = print show_type(var) var = {} show_type(var)

    nil

    nil表示一种类型,它只包含一个值nil。任何变量在未赋值前都是nil。当给一个全局变量赋值nil的时候,表示删除该变量。

    boolean

    boolean有两个值true和false.在lua中只有false和nil表示假,其他情况都为真,数字0也是真。

    code

    var = nil
    if var then
        print ("var is true")
    else
        print("var is false")
    end

    number

    number类型表示实数,不论是浮点数还是整型数都是number类型。
    code

    a = 10--整型
    b = 50.2--浮点数
    c = 5e20--科学计数法

    string

    Lua中字符串表示一个字符序列。里面可以包含任意的字符,包括数字0(c/c++中的字符串终止字符),并且Lua中字符串的长度是没有限制的,即可以是空字符也可以是整本数,Lua对字符串的处理是很快的。

    code

    str = "I'm a string."--单行字符串
    long_str = [[ I'm a "long",string. ]]--多行字符串
    print (str)
    print (long_str)
    --".."是字符串连接符
    str = "I'm ".."a".." string"
    print (str)
    str1 = "I'm"
    str2 = " a string"
    print(str1..str2)
    --"#"能得到字符串的长度
    print (#str1)
    print (#str2)
    print (#str)

    table

    Lua中的table类似C++中的map,但是,比map更简单。

    code

    t = {a = "test1",b = "test2"}

    表达式

    算术运算符

    算术运算符有:+(加),-(减),(乘),/(除),^(指数),%(取模),-(负号)*

    code

    a = 3
    b = 5
    print (a + b)
    print (a - b)
    print (a * b)
    print (a / b)
    print (a ^ b)
    print (a % b)
    print (-a)

    关系运算符

    关系运算符:<(小于),>(大于),<=(小于等于),>=(大于等于),~=(不等于),==(等于)

    对于table,userdata,function,Lua中是以他们的引用来做比较,只有当他们指向同一个对象的时候才是相等的。

    逻辑运算符

    逻辑运算符有:and(与),or(或),not(非)
    if not x then x = v end可以简写为x = x or v

    @H_110_301@字符串连接符

    这个上面已经说过了,这里就不多说了。

    操作符的优先级

    table 构造式

    默认的计数从1开始
    code

    t = {}--创建一个空的table
    a = {x = 10,y = 20}
    t = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Staturday"}
    t = {
        name="美女",age = 18,"美女背后的男人1","美女背后的男人2",}
    t = {}
    t.name = "美女"
    t.age = 18
    t[1] = "美女背后的男人1"
    t[2] = "美女背后的男人2"
    
    b = {["x"] = 10,["y"] = 20,1,2,3,4}
    
    --删除table中的一个元素
    b[1] = nil
    --删除table
    b = nil

    语句

    赋值语句

    关于赋值,lua里面比较有意思。

    code

    a = 10--正常的赋值
    a,b = 10,20--相当于a = 10,b = 20
    a,b = b,a--交换a,b的值,这个好简单
    --函数返回多个值
    function someValue()
      local a,20
      return a,b
    return

    局部变量与块

    lua中的变量也有局部变量和全局变量之分,默认定义的变量都是全局变量,定义局部变量需要添加local
    code

    i = 10--全局变量
    local j = i--局部变量
    --代码
    if true then
    --do end包围的为代码
        do
            local a = 20
            print (a)
        end
    
    end

    控制语句

    条件语句和循环
    --条件判断
    if a > b then
    else if a > c then
    end
    --while循环
    while a < 5 do
      a = a + 1--lua中没有a += 1这种语法
    end
    --repeat..until循环,类似do--while
    local i = 0
    repeat
      i = i + 1
      print(i..",")
    until > 3
    --for循环
    for var = from,end,step do
    end
    for i = 0,10,1 do
      print(i)
    end
    --for泛型
    t = {"Sunday","Staturday"}
    for k,v in pairs(t) do
      print(k,v)
    end

    函数

    函数定义

    function func()
    end
    
    func = function() end
    
    --定义对象的方法
    --":"定义的函数自动传入一个self(相当于this),"."定义的没有self传入
    class = {}
    function class.func1()
    end
    function class:func2()
    end
    函数参数与返回值

    Lua中函数的参数可以有任意多个,当给函数传递的参数超过函数定义的形参个数时,多余的参数会被舍弃,如果少,缺少的默认值为nil.

    Lua中函数返回多个参数是,所赋值的表达式不是最后的一个元素,那么函数只返回一个值用来赋值给变量.

    code

    function foo()
      return 30,50
    end
    x,y = foo(),20 --x = 30,y = 20

    _return返回一个函数的返回值,需要注意的死return f()这样的语句会把f()返回的所有值都返回,return (f())只能返回一个结果。
    unpack:接受一个数组作为参数,并从下标1开始返回该数组的所有元素。

    print(unpack{10,20,30})
    a,b = unpack{10,30}--a = 10,b = 20,30被舍弃
    a = {"hello","ll"}
    string.find(a)

    可变参数

    code

    function add(...)
      local s = 0
      for i,v in ipairs{...} do
        s = s + v
      end
      return s
    end

    闭包函数

    自己关于闭包的理解

    code

    function newCounter()
      local i = 0
      reutn function()
         i = i + 1
         return i
         end
    end
    c1 = newCounter()--1
    c2 = newCounter()--2

    猜你在找的Cocos2d-x相关文章