72家族网-游戏资源论坛


全站
4天前
全站
8天前
全站
9天前
全站
11天前
全站
17天前
全站
19天前
全站
20天前
全站
21天前
全站
21天前
全站
22天前
全站
23天前
全站
24天前
全站
25天前
全站
26天前
全站
26天前
全站
27天前
全站
27天前
全站
2019-10-13
全站
2019-10-10
全站
2019-10-09
全站
2019-10-08
全站
2019-10-07
全站
2019-10-07
全站
2019-10-03
全站
2019-09-25
全站
2019-09-24
全站
2019-09-23
全站
2019-09-21
全站
2019-09-21
全站
2019-09-20
查看:【163】 回复:【0】 发表于 2019-8-23 14:27
族长

  离线 

小编

发表于 2019-8-23 14:27 | 显示全部楼层 |[复制链接]|阅读模式

Lua要点 Lua是一种轻量的脚本解释语言,在游戏开发中多被用于实现需要进行热更新的...

Lua要点
Lua是一种轻量的脚本解释语言,在游戏开发中多被用于实现需要进行热更新的逻辑。
热更新:在不关闭游戏的情况下对游戏数据(素材、脚本)进行更新。由于不需要用户重新下载整个游戏,可以防止用户流失。
Lua热更新原理:将Lua代码文件作为文本素材下载以后,运行过程中即时解释运行,无需重新编译。
全局变量:
Lua变量默认为全局变量,无需修饰符,读取一个未声明的全局变量会返回空值nil
局部变量:
局部变量需要local修饰符,在不同位置声明,有不同的作用范围
变量名称使用字母或下划线开头
Lua保留关键字,不能用于变量名
   and       break     do       else      elseif
   end       false     for      function  if
   in        local     nil      not       or
   repeat    return    then     true      until
   while
Lua是大小写敏感的
Lua使用双横线--作为注释符号,--[[ ]]--作为块注释符号
  --[[
  print(10)         -- 这句代码不会执行
   ]]--
Lua8种基本数据类型:nil, boolean,number,string,userdata,function,thread,table
Luanilfalse视作布尔逻辑false,其余数据都视为true(包括0
Lua没有区分整数和浮点数,以下都是合法的数字表述:40.4 4.57e-3 0.3e125e+20
Lua字符串:
   a = "a line"
    b= 'another line'
使用 [[ ]] 定义字符串块
   page = [[
   <HTML>
   <HEAD>
   <TITLE>An HTML Page</TITLE>
   </HEAD>
   <BODY>
    <A HREF="http://www.lua.org">Lua</A>
    [[a text between double brackets]]
   </BODY>
   </HTML>
   
   write(page)
两个小数点是字符串连接符 ..
print(“Hello” .. “ World”)        --> Hello World
变量的多重赋值:在一条语句内为多个变量赋值
   a, b, c = 0, 1
   print(a,b,c)           --> 0 1nil
   a, b = a+1, b+1, b+2   -- b+2的值被忽略
   print(a,b)             --> 1 2
   a, b, c = 0
    print(a,b,c)           --> 0 nil nil
利用变量的多重赋值,可以简单地实现两个变量值的交换
       x,y = y, x                   -- 交换x y
       a,a[j] = a[j], a    -- 交换a a[j]
Lua提供的唯一的数据集合是Table(表),表存放的是键值对,类似于C#的字典
    a= {}     -- 创建一个空白的表,a是指向这个表的引用变量
    k= "x"
   a[k] = 10        -- 往表中添加一个新键值对,键是k变量存放的值(字符x),值是10
   a[20] = "great"  -- 往表中添加一个新键值对,键是20,值是字符串great
    print(a["x"])    --> 10
    k= 20
   print(a[k])      -->"great"
   a["x"] = a["x"] + 1     -- 把字符x对应的值加一
   print(a["x"])    -->11
也可以用以下写法访问表中的元素:
   a.x = 10                    -- 相当于a["x"] = 10
   print(a.x)                  -- 相当于print(a["x"])
   print(a.y)                  -- 相当于print(a["y"])
表的初始化:
只填入元素的值,键会自动从1开始排列(不是从0开始)  
days = {"Sunday","Monday", "Tuesday", "Wednesday","Thursday", "Friday", "Saturday"}
print(days[4])  --> Wednesday
元素的值可以通过函数的返回值获得
tab = {sin(1), sin(2), sin(3),sin(4),sin(5), sin(6), sin(7), sin(8)}
下面的两种初始化方式是等价的
a = {x=0, y=0}
a = {}; a.x=0; a.y=0
往表中存入1000个键值对的写法:
    a= {}     -- 创建空表
   -- 创建1000个键值对
   for i=1,1000 do a = i*2 end
   print(a[9])    --> 18
   a["x"] = 10
   print(a["x"])  --> 10
   print(a["y"])  --> 没有这个键,返回nil
Lua中一般把1作为第一个元素的编号(不是0
关系运算符:<   >   <= >=  ==  ~=
逻辑运算符:andornot
   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
   print(not nil)      --> true
   print(not false)    --> true
   print(not 0)        --> false
   print(not not nil)  --> false
流程控制语句:
if … then … else … end
   if a<0 then a = 0 end
   
   if a<b then return a else return b end
   
   if line > MAXLINES then
       showpage()
       line= 0
   end
if … then … elseif … then … end
   if op == "+" then
        r = a + b
   elseif op == "-" then
        r = a - b
   elseif op == "*" then
       r= a*b
   elseif op == "/" then
       r= a/b
   else
       error("invalidoperation")
   end
while ... do … end
   local i = 1
   while a do
       print(a)
       i= i + 1
   end
repeat … until …
   repeat
       line= os.read()
   until line ~= ""
   print(line)
for ... do ...
   for i=1,f(x) do print(i) end   
   for i=10,1,-1 do print(i) end
   local found = nil
   for i=1,a.n do
       ifa == value then
              found= i
              break
       end
   end
   print(found)
泛型for(使用for遍历Table
   -- 输出名为aTable的所有键值对
   for i,v in pairs(a) do print(i, v) end
   -- 输出名为tTable的所有键值对的键
for k inpairs(t) do print(k) end
   --只输出tTable的数组部分(以整数为键的元素)所有键值对的键
   for k in ipairs(t) do print(k) end
break return
break用于中断循环,return用于返回运行结果
Lua中的breakreturn只能放在代码块的最后,否则会产生语法错误
正确:
   local i = 1
   while a do
     if a == v then break end
     i = i + 1
    end
错误:
   function foo ()
     return          --<< return不是代码块的最后一句,语法错误
     -- 下面这句,用一个do代码块包住return,就不会有语法错误
     do return end   -- OK
     ...             -- return后面的代码都不会执行了
    end
Lua的函数
函数的调用写法
   print(8*9, 9/8)
   a = math.sin(3) + math.cos(10)
    print(os.date())
调用函数时,如果参数只有一个,并且参数是字符串或者表的初始化语句,可以省略括号
   print "Hello World"    <-->     print("HelloWorld")
   dofile 'a.lua'         <-->     dofile ('a.lua')
   print [[a multi-line   <-->     print([[a multi-line
    message]]                       message]])
   f{x=10, y=20}          <-->     f({x=10, y=20})
    type{}                  <-->     type({})
函数的定义格式
   -- 把数组a的所有元素累加
   function add (a)
     local sum = 0
     for i,v in ipairs(a) do
        sum = sum + v
     end
     return sum
    end
调用函数时如果省略参数,参数会被视为nil
   function incCount (n)
     n = n or 1
     count = count + n
    end
n被省略时,n = n or 1 = nil or 1 = 1,每次调用count会加一。
函数可以返回多个返回值
function foo2 () return 'a','b'end   -- 返回两个结果
可以使用多个变量接收函数的多个返回值
x, y = foo2()        -- x='a', y='b'

免责声明:

本站所有资源、教程来自互联网转载,仅供学习交流,不得商业运营资源,不确保资源完整性,不提供任何技术服务。【点击此处加入72家族网QQ群

本站资源仅供本地编辑研究学习参考,禁止未经资源商正版授权参与任何商业行为,违法行为!如需商业请购买各资源商正版授权

本站仅收集资源,提供用户自学研究使用,本站不存在私自接受协助用户架设游戏或资源,非法运营资源行为。免责声明

1、本站提供的所有资源仅供参考学习使用,版权归原著所有,禁止下载本站资源参与商业和非法行为,请在24小时之内自行删除!
2、本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,不存在任何商业目的与商业用途。
3、若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。 我们不承担任何技术及版权问题,且不对任何资源负法律责任。
4、论坛的所有内容都不保证其准确性,完整性,有效性。阅读本站内容因误导等因素而造成的损失本站不承担连带责任。
5、用户使用本网站必须遵守适用的法律法规,对于用户违法使用本站非法运营而引起的一切责任,由用户自行承担
6、本站所有资源来自互联网转载,版权归原著所有,用户访问和使用本站的条件是必须接受本站“免责声明”,如果不遵守,请勿访问或使用本网站
7、本站使用者因为违反本声明的规定而触犯中华人民共和国法律的,一切后果自己负责,本站不承担任何责任。
8、凡以任何方式登陆本网站或直接、间接使用本网站资料者,视为自愿接受本网站声明的约束。
9、本站以《2013 中华人民共和国计算机软件保护条例》第二章 “软件著作权” 第十七条为原则:为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。若有学员需要商用本站资源,请务必联系版权方购买正版授权!
10、本网站如无意中侵犯了某个企业或个人的知识产权,请来信【站长信箱】告之,本站将立即删除。

【点击此处查看部分资源的解压密码】

【资源失效,购买后无法正常下载解决办法】


回复

使用道具 打印 举报

回复楼主 感谢您加入72家族网!每发一个帖子可以增加一定的家族币哦~请点击右下角“查看本版积分规则”

游客
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

最新资源上一条 /1 下一条

本站创立于2011年,已运行,感谢一路相伴