Lua脚本语言基础教程ppt课件.ppt

上传人:牧羊曲112 文档编号:2076117 上传时间:2023-01-07 格式:PPT 页数:55 大小:1.70MB
返回 下载 相关 举报
Lua脚本语言基础教程ppt课件.ppt_第1页
第1页 / 共55页
Lua脚本语言基础教程ppt课件.ppt_第2页
第2页 / 共55页
Lua脚本语言基础教程ppt课件.ppt_第3页
第3页 / 共55页
Lua脚本语言基础教程ppt课件.ppt_第4页
第4页 / 共55页
Lua脚本语言基础教程ppt课件.ppt_第5页
第5页 / 共55页
点击查看更多>>
资源描述

《Lua脚本语言基础教程ppt课件.ppt》由会员分享,可在线阅读,更多相关《Lua脚本语言基础教程ppt课件.ppt(55页珍藏版)》请在三一办公上搜索。

1、AllenFang,怎么读?/lua/(噜啊),1993 年在巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro in Brazil)诞生了一门编程语言,发明者是该校的三位研究人员。,Roberto Ierusalimschy,Waldemar Celes,Luiz Henrique de Figueiredo,History“SOL”Simple Object Language,c.1993 PUC-Rio and Tecgraf Petrobras Major influences:SNOBOL,Icon,AWK,Bi

2、btex,Scheme,LUA在游戏开发中做什么?,数据描述配置管理逻辑控制比如任务系统,NPC对话,出现时间,地点等。还可以用来开发游戏插件。,LUA入门,注释,单行注释连续两个减号-表示注释的开始,一直延续到行末为止。相当于C+语言中的/。多行注释由-表示注释开始,并且一直延续到为止。这种注释相当于C语言中的/*/。在注释当中,和是可以嵌套的。,分隔,分号;空格如果多个语句写在同一行的话,建议总是用分号隔开。,条件控制语句,if条件thenelseif条件thenelseendwhile条件doendrepeatuntil条件for变量=初值,终点值,步进doendfor变量1,变量2,变

3、量Nin表或枚举函数doend,语句块,语句块在C+中是用和括起来的,在Lua中,它是用do和end括起来的。比如:doprint(“Hello”)end,赋值语句,赋值语句在Lua被强化了。它可以同时给多个变量赋值。例如:a,b,c,d=1,2,3,4甚至是:a,b=b,a-多么方便的交换变量功能啊。,全局变量/局部变量,默认情况下,变量总是认为是全局的。局部变量,定义局部变量需要第一次赋值的时候local说明。比如:locala,b,c=1,2,3 a,b,c都是局部变量,数值运算,支持+,-,*,/多了一个 乘方运算 2 3 结果为8连接字符串.Thisa.string.-等于thisa

4、string,比较运算,所有这些操作符总是返回true或false。,特殊类型运算,Table,Function和Userdata类型只有=和=可以用。相等表示两个变量引用的是同一个数据。,逻辑运算,and,or,not有false和nil才计算为false,其它任何数据都计算为true,0也是true!,运算符优先级,not-(一元运算)*/+-.(字符串连接)=andor,关键字,关键字是不能做为变量的。Lua的关键字不多,就以下几个:,变量类型,Nil空值Boolean布尔值Number数值String字符串Table关系表类型Function函数类型UserdataThread 线程类

5、型,变量类型,怎么确定一个变量是什么类型的呢?type()函数,变量的定义,不需要声明所有的这些变量总是全局变量,除非,你在前面加上local。区分大小写赋值:“”操作 var1=nil-请注意nil一定要小写,Table,可以把这个类型看作是一个数组你可以用任意类型 来作数组的索引,除了nil。,Table定义,Table的定义:用和来括起T1=-定义一个空表T11=10-然后我们就可以象C语言一样来使用它了。T1“John”=Age=27,Gender=“Male”这一句相当于:T1“John”=-必须先定义成一个表T1JohnAge=27T1JohnGender=Male,当表的索引是字

6、符串的时候,我们可以简写成:T1.John=T1.John.Age=27T1.John.Gender=“Male“或T1.JohnAge=27,Gender=Male,Table注意点,所有元素之间,总是用逗号,隔开;所有索引值都需要用和括起来;如果是字符串,还可以去掉引号和中括号;如果不写索引,则索引就会被认为是数字,并按顺序自动从1往后编;,表类型可以拥有任意类型的值,包括函数t=Age=27add=function(self,n)self.Age=self.Age+nend print(t.Age)-27t.add(t,10)print(t.Age)-37t:add(10)-相当于t.a

7、dd(t,10),Function,functionadd(a,b)-add是函数名字,a和b是参数名字returna+b-return用来返回函数的运行结果end,可变参数个数,functionsum(a,b,)如果想取得所代表的参数,可以在函数中访问arg局部变量(表类型)得到。如sum(1,2,3,4)则,在函数中,a=1,b=2,arg=3,4,可以同时返回多个结果,functions()return1,2,3,4enda,b,c,d=s(),此时,a=1,b=2,c=3,d=4,函数的使用,e02.lua-functionsfunctionpythagorean(a,b)localc

8、2=a2+b2returnsqrt(c2)endprint(pythagorean(3,4),运行结果5,循环语句,-Loopsfori=1,5doprint(iisnow.i)end,运行结果iisnow1iisnow2iisnow3iisnow4iisnow5,for i=10,1,-1 do print(i)end变量将以参数3为步长,由参数1变化到参数2,条件分支语句,-Loopsandconditionalsfori=1,5doprint(“iisnow“.i)ifi2thenprint(“small”)elseifi4thenprint(“medium”)elseprint(“bi

9、g”)endend,运行结果iisnow1smalliisnow2mediumiisnow3mediumiisnow4bigiisnow5big,数组的使用,-ArraysmyData=myData0=“foo”myData1=42-HashtablesmyData“bar”=“baz”,-Iteratethroughthe-structureforkey,valueinmyDatadoprint(key.“=“.value)end,输出结果0=foo1=42bar=baz,Table的嵌套,-TableconstructormyPolygon=color=“blue”,thickness=2

10、,npoints=4;x=0,y=0,x=-10,y=0,x=-5,y=4,x=0,y=4,-Printthecolorprint(myPolygon“color”)-Printitagainusingdot-notationprint(myPolygon.color),输出结果:blue,-Thepointsareaccessible-inmyPolygon1tomyPolygon4-Printthesecondpointsx-coordinateprint(myPolygon2.x),输出结果:-10,Lua标准库,独立函数:assert,pairs,print,type,require,

11、协同函数:coroutine.*调试函数:debug.*文件函数:io.*,file:*数学函数:math.*系统函数:os.*模块函数:package.*字符函数:string.*数组函数:table.*C API函数:lua_*辅助函数:luaL_*,开发环境,环境:lua for windows(lfW)主页:http:/for windows其实是一整套Lua的开发环境,它包括:lExecutor(Lua解释器)Lua Reference Manual(Lua参考手册)Quick LuaTour(Lua快速入门)Examples(Lua范例)Libraries with documen

12、tation(一些Lua库和文档)SciTE(一个很棒的多用途编辑器,已经对Lua做了特殊设置)其它详细的内容请到luaforge的主页上查看。,Visual Studio载入Lua库,基础函数,lua.h定义了Lua提供的基础函数。其中包括创建一个新的Lua环境的函数(如lua_open),调用Lua函数(如lua_pcall)的函数,读取/写入Lua环境的全局变量的函数,注册可以被Lua代码调用的新函数的函数,等等。所有在lua.h中被定义的都有一个lua_前缀。,辅助库函数,lauxlib.h定义了辅助库(auxlib)提供的函数。所有在其中定义的函数等都以luaL_打头(例如,luaL

13、_loadbuffer)。辅助库利用lua.h中提供的基础函数提供了更高层次上的抽象;所有Lua标准库都使用了auxlib。基础API致力于economy and orthogonality,相反auxlib致力于实现一般任务的实用性。当然,基于你的程序的需要而创建其它的抽象也是非常容易的。需要铭记在心的是,auxlib没有存取Lua内部的权限。它完成它所有的工作都是通过正式的基本API。,头文件lualib.h定义了打开这些库的函数。如,调用luaopen_io,以创建io table并注册I/O函数(io.read,io.write等等)到Lua环境中。,Lua调用C DLL,#inclu

14、de lua.h#include lualib.h#include lauxlib.h#include/*-定义函数-*/static int MyLuaDLL_HelloWorld(lua_State*L)MessageBox(NULL,Hello,World,MB_OK);return 0;static int MyLuaDLL_average(lua_State*L)/*get number of arguments*/int n=lua_gettop(L);double sum=0;int i;/*loop through each argument*/for(i=1;i=n;i+)/

15、*total the arguments*/sum+=lua_tonumber(L,i);/*push the average*/lua_pushnumber(L,sum/n);/*push the sum*/lua_pushnumber(L,sum);/*return the number of results*/return 2;,*-注册函数-*/static const luaL_reg MyLuaDLLFunctions=HelloWorld,MyLuaDLL_HelloWorld,average,MyLuaDLL_average,NULL,NULL;int _cdecl _decl

16、spec(dllexport)luaopen_MyLuaDLL(lua_State*L)luaL_openlib(L,MyLuaDLL,MyLuaDLLFunctions,0);return 1;,C code,Lua code,local testlib=package.loadlib(Lua_Dll.dll,luaopen_MyLuaDLL);print(testlib)if(testlib)then testlib();else-ErrorendMyLuaDLL.HelloWorld();a,b=MyLuaDLL.average(23,33,3344);print(average:,a,sum:,b);,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号