版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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
2、, AWK, Bibtex, Scheme,LUA在游戏开发中做什么?,数据描述 配置管理 逻辑控制 比如任务系统,NPC对话,出现时间,地点等。 还可以用来开发游戏插件。,LUA入门,注释,单行注释 连续两个减号-表示注释的开始,一直延续到行末为止。 相当于C+语言中的/。 多行注释 由-表示注释开始,并且一直延续到为止。 这种注释相当于C语言中的/*/。在注释当中,和是可以嵌套的。,分隔,分号; 空格 如果多个语句写在同一行的话,建议总是用分号隔开。,条件控制语句,if条件thenelseif条件thenelseend while条件doend repeatuntil条件 for变量=初值
3、,终点值,步进doend for变量1,变量2,变量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
4、结果为8 连接字符串 . Thisa.string.-等于thisastring,比较运算,所有这些操作符总是返回true或false。,特殊类型运算,Table,Function和Userdata类型 只有=和=可以用。相等表示两个变量引用的是同一个数据。,逻辑运算,and,or,not 有false和nil才计算为false,其它任何数据都计算为true,0也是true!,运算符优先级, not - (一元运算) * / + - .(字符串连接) = = = and or,关键字,关键字是不能做为变量的。 Lua的关键字不多,就以下几个:,变量类型,Nil空值 Boolean布尔值 Num
5、ber数值 String字符串 Table关系表类型 Function函数类型 Userdata Thread 线程类型,变量类型,怎么确定一个变量是什么类型的呢? type()函数,变量的定义,不需要声明 所有的这些变量总是全局变量,除非,你在前面加上local。 区分大小写 赋值: “”操作 var1=nil-请注意nil一定要小写,Table,可以把这个类型看作是一个数组 你可以用任意类型 来作数组的索引,除了nil。,Table定义,Table的定义:用和来括起 T1=-定义一个空表T11=10-然后我们就可以象C语言一样来使用它了。T1“John”=Age=27,Gender=“Ma
6、le”这一句相当于:T1“John”=-必须先定义成一个表T1JohnAge=27T1JohnGender=Male,当表的索引是字符串的时候,我们可以简写成: T1.John=T1.John.Age=27T1.John.Gender=“Male“或T1.JohnAge=27,Gender=Male,Table注意点,所有元素之间,总是用逗号,隔开; 所有索引值都需要用和括起来;如果是字符串,还可以去掉引号和中括号; 如果不写索引,则索引就会被认为是数字,并按顺序自动从1往后编;,表类型可以拥有任意类型的值,包括函数 t=Age=27add=function(self,n)self.Age=s
7、elf.Age+nend print(t.Age)-27t.add(t,10)print(t.Age)-37 t:add(10)-相当于t.add(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,4 end a,b,c,d=s(
8、),此时,a=1,b=2,c=3,d=4,函数的使用,e02.lua-functionsfunctionpythagorean(a,b)localc2=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,5dopr
9、int(“iisnow“.i)ifi2thenprint(“small”)elseifi4thenprint(“medium”)elseprint(“big”)endend,运行结果iisnow1smalliisnow2mediumiisnow3mediumiisnow4bigiisnow5big,数组的使用,-ArraysmyData=myData0=“foo”myData1=42 -HashtablesmyData“bar”=“baz”,-Iteratethroughthe-structureforkey,valueinmyDatadoprint(key.“=“.value)end,输出结
10、果0=foo1=42bar=baz,Table的嵌套,-TableconstructormyPolygon=color=“blue”,thickness=2,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-coord
11、inateprint(myPolygon2.x),输出结果:-10,Lua标准库,独立函数:assert, pairs, print, type, require, 协同函数:coroutine.* 调试函数: debug.* 文件函数:io.*, file:* 数学函数:math.* 系统函数:os.* 模块函数:package.* 字符函数:string.* 数组函数:table.* C API函数:lua_* 辅助函数:luaL_*,开发环境,环境:lua for windows (lfW) 主页: lua for windows其实是一整套Lua的开发环境,它包括: lExecutor
12、(Lua解释器) Lua Reference Manual(Lua参考手册) Quick LuaTour (Lua快速入门) Examples (Lua范例) Libraries with documentation (一些Lua库和文档) SciTE (一个很棒的多用途编辑器,已经对Lua做了特殊设置) 其它详细的内容请到luaforge的主页上查看。,Visual Studio载入Lua库,基础函数,lua.h定义了Lua提供的基础函数。 其中包括创建一个新的Lua环境的函数 (如lua_open),调用Lua函数(如lua_pcall)的函数,读取/写入Lua环境的全局变量的函数,注册可
13、以被Lua代码调用的新函数的函数,等等。所有在lua.h中被定义的都有一个lua_前缀。,辅助库函数,lauxlib.h定义了辅助库(auxlib)提供的函数。 所有在其中定义的函数等都以luaL_打头(例如,luaL_loadbuffer)。辅助库利用lua.h中提供的基础函数提供了更高层次上的抽象;所有Lua标准库都使用了auxlib。基础API致力于economy and orthogonality,相反auxlib致力于实现一般任务的实用性。当然,基于你的程序的需要而创建其它的抽象也是非常容易的。需要铭记在心的是,auxlib没有存取Lua内部的权限。它完成它所有的工作都是通过正式的基
14、本API。,头文件lualib.h定义了打开这些库的函数。 如,调用luaopen_io,以创建io table并注册I/O函数(io.read,io.write等等)到Lua环境中。,Lua调用C DLL,#include 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
15、 *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+) /* 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 _declspec(dllexport) luaopen_MyLuaDLL(lua_State* L) luaL_openlib(L, MyLuaDLL,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小区健身器材管护实施方案
- 素养教育组织架构优化
- 管道廊道消防安全要求
- 课堂教学优化实施细则
- 金融市场学第三版习题及答案
- 健康素养达标测试试题及答案
- 建筑工程安全保障体系与措施
- 基层医疗机构急诊急救理论试题及答案
- 火车司机考试题库及答案
- 轨道车司机抽考题库及答案
- 创伤性肋骨胸骨骨折诊疗共识
- 管工培训课件
- 邮储银行重庆市万州区2025秋招笔试数量关系题专练及答案
- 政府绩效管理课件
- 劳动保护用品使用指南
- 巨量千川-品牌广告(初级)营销师认证考试题库(附答案)
- Be动词是个好妈妈她有三个乖娃娃(课件)英语三年级上册
- 水电站安全守护制度
- DL-T825-2021电能计量装置安装接线规则
- 英语四六级词汇汇总(带音标+免费下载)
- 如愿三声部合唱简谱
评论
0/150
提交评论