美文网首页程序员
游戏开发学习笔记二:Lua语言学习

游戏开发学习笔记二:Lua语言学习

作者: Iamsoulmate | 来源:发表于2019-04-26 18:58 被阅读7次

    前言

    本人小白一枚,目前在做Android开发闲暇时间想学习一下游戏开发,觉得很有意思,文中若出现错误之处请大家指出来。共同学习,共同进步。

    一、环境搭建

    1. Mac OS X 系统上安装

    执行命令:
    curl -R -O http://www.lua.org/ftp/lua-5.3.0.tar.gz
    tar zxf lua-5.3.0.tar.gz
    cd lua-5.3.0
    make linux test
    make install

    2. Window 系统上安装 Lua

    window下你可以使用一个叫"SciTE"的IDE环境来执行lua程序,下载地址为:
    本站下载地址:LuaForWindows_v5.1.4-46.exe
    Github 下载地址:https://github.com/rjpcomputing/luaforwindows/releases
    Google Code下载地址 : https://code.google.com/p/luaforwindows/downloads/list
    双击安装后即可在该环境下编写 Lua 程序并运行。
    你也可以使用 Lua 官方推荐的方法使用 LuaDist:http://luadist.org/

    备注:开发工具可以使用sublime+QuickXDev

    二、Lua语言基础

    1. 入门
    • 大家可以去这个网站,很详细的基础知识学习。
      Lua语言学习
    2. 踩过的坑
    1. 循环遍历注意区别pairs 与 ipairs
    tab1 = { key1 = "val1", key2 = "val2", "val3" }
    for k, v in pairs(tab1) do
        print(k .. " - " .. v)
    end
    

    区别可参考点这里

    1. 字符串拼接使用 ..
    print("a" .. 'b')
    print(157 .. 428)
    
    1. 使用 + 拼接字符串会报错
    print("error" + 1)
    --报错日志
    stdin:1: attempt to perform arithmetic on a string value
    stack traceback:
            stdin:1: in main chunk
            [C]: in ?
    
    1. 使用 # 计算字符串长度
    len = "www.runoob.com"
    print(#len)
    14
    
    1. 0为数组的起始索引
    2. function可以存进变量里面
    funcation test1(n){
        print(n)
    }
    test2 = test1
    print(test2(1))
    
    1. function 可以以匿名函数(anonymous function)的方式通过参数传递
    -- function_test2.lua 脚本文件
    function testFun(tab,fun)
            for k ,v in pairs(tab) do
                    print(fun(k,v));
            end
    end
    
    
    tab={key1="val1",key2="val2"};
    testFun(tab,
    function(key,val)--匿名函数
            return key.."="..val;
    end
    );
    
    1. Lua 可以对多个变量同时赋值
    a, b = 10, 2*x 
    --等同于
    a=10; b=2*x
    
    1. 当变量个数和值的个数不一致时,Lua会一直以变量个数为基础
    a, b, c = 0, 1
    print(a,b,c)             --> 0   1   nil
     
    a, b = a+1, b+1, b+2     -- value of b+2 is ignored
    print(a,b)               --> 1   2
     
    a, b, c = 0
    print(a,b,c)             --> 0   nil   nil
    
    3. 线程thread

    在 Lua 里,最主要的线程是协同程序(coroutine)。它跟线程(thread)差不多,拥有自己独立的栈、局部变量和指令指针,可以跟其他协同程序共享全局变量和其他大部分东西。

    线程跟协程的区别:线程可以同时多个运行,而协程任意时刻只能运行一个,并且处于运行状态的协程只有被挂起(suspend)时才会暂停。

    4. userdata(自定义类型)

    userdata 是一种用户自定义数据,用于表示一种由应用程序或 C/C++ 语言库所创建的类型,可以将任意 C/C++ 的任意数据类型的数据(通常是 struct 和 指针)存储到 Lua 变量中调用

    5. Lua面向对象
    1. 介绍
    lua没有面向对象,但是有人开发了tolua++ 的第三方软件包,让lua支持面向对象,quick-cocos2dx默认已经集成了这个包。
    
    2. 要点
    1. 类定义
    local User = class('User')
    
    --变量
    User.name = 'Jeck'
    User.age = 23
    User.id = 1
    
    function User:ctor()
        print('User create()')
    end
    
    --使用User.赋值的话改变的是所有new出来对象的值相当于是静态变量
    function User:getName()
        return User.name
    end
    
    function User:setName(str)
        User.name = str
    end
    
    --调用self的方法改变的的new出来对象自己的值
    function User:getAge()
        return self.age
    end
    
    function User:setAge(num)
        self.age = num
    end
    
    return User
    
    

    注意:代码中的注释请仔细看

    1. 类使用
    local classUser = require('app.scenes.User')
    local user1 = classUser.new() --调用构造方法
    user1:setName("Merry")       --方法调用
    local name = user1:getName() --方法调用
    
    1. 类继承
    local User = require("app.scenes.User")
    local Student = class("Student", User)
    
    function Student:crot()
        Student.super.cror()    --调用父类构造方法
    end
    
    return Student
    
    1. 方法重载
      lua中没有方法重载,无论是否有参数,默认都是同一个方法,调用的时候会调用下面写的那个方法
    local User = require("app.scenes.User")
    local Student = class("Student", User)
    
    function Student:ctor()
        Student.super.ctor()
    end
    
    function Student:ctor(name)
        print("调用带参构造")
    end
    
    return Student
    

    这种情况Student.new()方法会调用到带参构造,如果两个方法互换位置,则会调用无参构造,例如:

    local User = require("app.scenes.User")
    local Student = class("Student", User)
    
    function Student:ctor(name)
        print("调用带参构造")
    end
    
    function Student:ctor()
        Student.super.ctor()
    end
    
    return Student
    

    三、总结

    至此已经lua基础已经学完,懂得了基础语法后,更深的层次知识还是需要大家在项目实战中去学习。下面我们将开始学习游戏开发。
    参考:

    1. https://www.runoob.com/lua/lua-tutorial.html
    2. 腾讯课堂《Cocos2d-Lua手游开发基础篇》

    PS:本人也是小白学习,文中若有错误请指出来。谢谢!!!

    相关文章

      网友评论

        本文标题:游戏开发学习笔记二:Lua语言学习

        本文链接:https://www.haomeiwen.com/subject/xdnqnqtx.html