【游戏开发笔记】LUA基础与应用.doc

上传人:仙人指路1688 文档编号:2387329 上传时间:2023-02-17 格式:DOC 页数:19 大小:224.50KB
返回 下载 相关 举报
【游戏开发笔记】LUA基础与应用.doc_第1页
第1页 / 共19页
【游戏开发笔记】LUA基础与应用.doc_第2页
第2页 / 共19页
【游戏开发笔记】LUA基础与应用.doc_第3页
第3页 / 共19页
【游戏开发笔记】LUA基础与应用.doc_第4页
第4页 / 共19页
【游戏开发笔记】LUA基础与应用.doc_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《【游戏开发笔记】LUA基础与应用.doc》由会员分享,可在线阅读,更多相关《【游戏开发笔记】LUA基础与应用.doc(19页珍藏版)》请在三一办公上搜索。

1、【游戏开发笔记】Lua基础与应用有关Lua的FAQQ:Lua是什么?A:Lua由标准C编写而成,几乎在所有操作系统和平台上都可以编译,运行。其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。(感谢百度百科)Q:为什么用Lua?A: 1、开源,就是不用钱。2、灵活扩展你的软件(增加游戏关卡,制作文字类游戏等等)3、灵活进行软件配置(例如一个GUI程序的界面微调,而且支持if.else.这样的配置方式,爽吧)4、弱类型,这意味着在宿主语言内比较麻烦的逻辑计算操作都可以扔给lua5、纯c编写,意味着比python这样的老牌脚本语言运行更快(话说python跑在虚拟机上的,跟ja

2、va差不多)Q:我感觉我很菜,能学习Lua么?A:话说我也很菜。总之你学会c语言后就能学Lua了,programming in lua里面有lua与c交互的例子。会c+更佳,游戏开发你总要会c+吧一、 新手任务编译静态库,解析器,编译器lua官网http:/www.lua.org/找到最新的版本5.2.2下载下来其实我们得到的是一堆源码,打开src文件夹看看所以我们要自己编译想要的东西= =先打开高端洋气的vs2012(呵呵(配置方法跟微软其他的IDE差不多,只用vs2012举例)新建一个空的控制台程序。然后把lua源码复制到工程目录下并添加到项目在release下配置类型为lib为了编译静态

3、库,需要把下面两个文件移除到工程外(lua.cpp是编译解析器的,luac就是用来编译编译器的= =)如果你是用vs2012编译lib,请添加这个宏(感谢CHU提醒)_CRT_SECURE_NO_WARNINGS编译成功,生成lib收起回复 6楼 2013-07-05 08:25 举报|wishout:自己在桌面建一个文件夹先把lib保存起来吧= =2013-7-5 08:27回复chu:你为何不直接点上面那个静态库呢。2013-7-7 00:04回复梦里唱忧伤:同问,建工程直接选静态库就是。接下来编译解析器= =把配置类型改为exe 把用来编译解析器的lua.cpp添加回项目中编译ok,生成

4、编析器为了在控制台下使用方便,可以改名为lua.exe继续保存到新建的文件夹里= =编译解编译器,把luac.cpp添加到项目,移除lua.h,lua.cpp改名为luac.exe保存到刚才的文件夹下,现在我们要用到的东西都做好了,欧耶在使用这些东西之前,我们先来简单地了解一下lua语法,想深入学习的同学自己找些专业的资料1、lua类型lua分为这些类型Nil、Booleans、Numbers、Strings、Functions、Userdata、Threads这些看名字都能懂吧。Nil就是空,就是什么都没有(话说在java里面null不是一个对象,那老师怎么整天在说java一切都是对象,害我

5、java考试那题没分了= =)Booleans是布尔型,true 和 falseNumbers是数值类型,在lua里面,你学过的int float double long short都是这种数值类型,所以知道lua为什么被叫做弱类型语言了吧而且由于我们可以这样声明一个Numbersa = 4b = 0.4c = 4.57e - 3d = 0.3e12跟python一样,lua变量的类型只有在执行脚本的时候被确定,所以前面不用声明类型Strings是字符串类型通用地,我们这样声明一个Stringss = hello wishout!那些转义字符例如n, t, 跟c是一样的,放心用吧Functio

6、ns是函数类型在lua里面,我们这样下面的形式使用函数function 函数名(参数一, 参数二, 参数三.)end哈哈,很简单吧比如我们写一个NPC对话的函数function PrintNPCMsg(msg)print(msg)end2、表达式算术运算符+ - * / (加减乘除,还有幂!)-(相反数)关系运算符 = = =注意lua里面没有!=这个东西,被取代为=逻辑运算符and or not(与、或、非)特殊地,在字符串操作中,lua有很方便的一个操作符.(两个点号,用来连接连个字符串)例如hello . wishout! = hello wishout!3、lua神器table的构造为

7、什么说table是神器呢?因为它很神啊!(废话)table是lua里特有的东西(也不算特有吧,python也有元组,字典之类的东西)类似于c语言里面数组的东西构造方法如下mytable = wishout, sama, i, love, you!, 1, 2, 3table里面可以放你任何想放的东西table构造完以后,我们像访问数组一样访问table,注意lua的table下标从1开始,Strings也一样mytable1 = wishoutmytable3 = imytable6 = 1字典方法构造tablemytable = master = wishout, servant = you

8、我们现在可以这样访问tablemytablemaster = wishoutservantservant = you用这样方法配置游戏相当的爽config = client_x = 100, client_y = 100, width = 640, height = 480, windowed = false这种方法还能管理游戏素材的映射,相当方便,欧耶我现在做的一个小游戏是这样管理一个背景纹理的映射的bk_0 = res = TEX, id = bk_0, path = Resgraphicsbk_0.png, width = 640, height = 480我在c+里面就能很方便的取得这

9、个背景纹理的信息,不用硬编码就是很爽啊3、lua神器(续)table的遍历与维护我们用# tablename这样方式取得一个table的长度,这种方法也适用于求一个字符串的长度例如mytable = wishout, sama, i, love, you!, 1, 2, 3s = 123# mytable = 8# s = 3既然我们得到了table的长度,我们就能遍历这个tablefor i = 1, # mytable doprint(mytablei)end输出:wishoutsamailoveyou!123我们这里使用了一个循环语句的知识,语法如下for i = 起始下标, 终止下标,

10、 步长 do循环体end我们步长不写默认为一往table里面插入元素的方法table.insert(tablename, tableitem)例如table.insert(mytable, shit)也可以插入一个tabletable.insert(mytable, holy , shit!)删除table元素的方法table.remove(tablename, tableindex)例如table.remove(mytable, 1)清空table的方法(so easy.)tablename = 4、基本语法控制语句if 条件 thendotaskendif 条件 thendotask_1e

11、lsedotask_2endif 条件一 thendotask_1elseif 条件二 thendotask_2end循环语句while 条件 do循环体endrepeat循环体util 条件for i = 起始下标, 终止下标, 步长 do循环体end*break在lua里的用法一样*return用法一样*lua里有个local关键字,被local声明的变量只在被声明的代码块里面有效wishout:以上语法在游戏开发里基本够用,更多高级语法请参详专业资料二、 点亮武器天赋静态库、编译器、解析器的使用,两个好用的lua编辑器好吧,我们学习完了lua的基本语法,现在拿我们编译好的东西玩玩(o)/

12、我们先新建一个lua脚本文件,键入一条简单的语句与解析器、编译器放在同一目录下在命令行下进入该目录使用lua -i命令进入lua交互模式,你能看到自己正在使用的lua版本我们使用dofile(filename)命令调用lua解析器执行特定脚本上面是执行lua脚本的方法一下面介绍方法二我们可以用luac.exe先把lua脚本编译一次,再去执行编译后的脚本,这样用户就不能随意修改我们编译后的脚本了,哈哈首先退出交互模式我们用这种形式编译特定脚本luac -o 编译后脚本名 脚本名编译成功后,目录下生成一个文件再次进入交互模式,执行这个文件执行结果是一样的,但这种方法能杜绝玩家修改脚本的可能刚才我们

13、使用notepad编辑lua脚本,作为一个程序猿,不会装逼怎么行!所以呢,我向大家介绍两个好用的编辑器,如果你用过,当我没说= =屌丝的好帮手notepad+如果你经常在window写代码,应该对这款软件有所耳闻吧,看看它的lua高亮方案大概就是这种效果,还是蛮顺眼的= =高帅的象征Sublime Text 2我从刚用sublime text 2的时候,瞬间有种屌丝变高帅,村里刚通网的感觉!我马上意识到,这是一款高帅的软件,帅的无法直视啊啊啊啊啊lua高亮方案Sublime Text 2还支持脚本的执行(果然是高帅的软件),实际上要配置一下的,自己到网上找= =使用静态库c/c+与lua的交互

14、在vs下建立一个控制台空项目,项目包含src下面的头文件,附加库和依赖项填好刚才编译好的lib项目里建立一个源文件Main.cp,包含我们要用到的头文件#include lua.h#include lualib.h#include lauxlib.h声明一个全局变量lua_State * L;在main里面开始lua的初始化工作/开启lua状态机L = luaL_newstate();/装载lua库luaL_openlibs(L);相比起d3d,lua的初始化操作太简单了,我要感动的哭了T_T/执行脚本luaL_dofile(L, res.lua);/关闭lua状态机lua_close(L);

15、c+调用lua函数的例子/c+调用lua函数void PrintMsg(const char * msg)/填充一个lua函数名lua_getglobal(L, PrintMsg);/参数进栈lua_pushstring(L, msg);/使用lua_pcall调用lua本函数if(lua_pcall(L, 1, 0, 0) != 0)std:cout FAILED - PrintMsg(): std:cout lua_tostring(L, -1);void main (void)/开启lua状态机L = luaL_newstate();/装载lua库luaL_openlibs(L);/执行

16、脚本luaL_dofile(L, mylua.lua);/调用函数PrintMsg(hello wishout!);system(pause);/关闭lua状态机lua_close(L);/lua脚本function PrintMsg(msg)print(msg)endlua调用c+函数的例子/lua调用c+函数int Add(lua_State * L)/提取参数int a = (int)lua_tonumber(L, 1);int b = (int)lua_tonumber(L, 2);/c+实际完成的工作int c = a + b;/计算结果进栈lua_pushnumber(L, c);

17、/因为要返回一个参数,所以要return 1return 1;void main (void)/开启lua状态机L = luaL_newstate();/装载lua库luaL_openlibs(L);/往lua脚本添加c+函数lua_pushcfunction(L, Add);/添加一个函数名lua_setglobal(L, Add);/执行脚本luaL_dofile(L, mylua.lua);system(pause);/关闭lua状态机lua_close(L);lua脚本print(Add(1, 2)三、 魔法学堂lua的简单应用嘛嘛,楼主写了一上午的帖子,这层就结束了下面是我以前练手用

18、的控制台版avg源码,里面有注释,可以简单看一下lua的实际使用(我承认写的很渣= =)-完-表扬吧主大人的无私奉献咳咳然后、其实、Lua的CAPI用起来不是那么简单的,你要查询每个函数会造成什么副作用比如会对lua虚拟机的堆栈造成什么影响(弹出几个元素、加入几个元素)Lua本身还涉及到GC、注册表、Upvalue等等各种概念为了方便与C+交互,网上有很多Lua的扩展。如tolua+、luabind、luaplus等等通过这些扩展你可以直接在lua里面创建一个C+类。把C+类成员函数绑定到lua里面等等我的大学爱情观目录:一、 大学概念二、 分析爱情健康观三、 爱情观要三思四、 大学需要对爱情

19、要认识和理解五、 总结1、什么是大学爱情:大学是一个相对宽松,时间自由,自己支配的环境,也正因为这样,培植爱情之花最肥沃的土地。大学生恋爱一直是大学校园的热门话题,恋爱和学业也就自然成为了大学生在校期间面对的两个主要问题。恋爱关系处理得好、正确,健康,可以成为学习和事业的催化剂,使人学习努力、成绩上升;恋爱关系处理的不当,不健康,可能分散精力、浪费时间、情绪波动、成绩下降。因此,大学生的恋爱观必须树立在健康之上,并且树立正确的恋爱观是十分有必要的。因此我从下面几方面谈谈自己的对大学爱情观。2、什么是健康的爱情:1) 尊重对方,不显示对爱情的占有欲,不把爱情放第一位,不痴情过分;2) 理解对方,

20、互相关心,互相支持,互相鼓励,并以对方的幸福为自己的满足; 3) 是彼此独立的前提下结合;3、什么是不健康的爱情:1)盲目的约会,忽视了学业;2)过于痴情,一味地要求对方表露爱的情怀,这种爱情常有病态的夸张;3)缺乏体贴怜爱之心,只表现自己强烈的占有欲;4)偏重于外表的追求;4、大学生处理两人的在爱情观需要三思:1. 不影响学习:大学恋爱可以说是一种必要的经历,学习是大学的基本和主要任务,这两者之间有错综复杂的关系,有的学生因为爱情,过分的忽视了学习,把感情放在第一位;学习的时候就认真的去学,不要去想爱情中的事,谈恋爱的时候用心去谈,也可以交流下学习,互相鼓励,共同进步。2. 有足够的精力:大

21、学生活,说忙也会很忙,但说轻松也是相对会轻松的!大学生恋爱必须合理安排自身的精力,忙于学习的同时不能因为感情的事情分心,不能在学习期间,放弃学习而去谈感情,把握合理的精力,分配好学习和感情。3、 有合理的时间;大学时间可以分为学习和生活时间,合理把握好学习时间和生活时间的“度”很重要;学习的时候,不能分配学习时间去安排两人的在一起的事情,应该以学习为第一;生活时间,两人可以相互谈谈恋爱,用心去谈,也可以交流下学习,互相鼓励,共同进步。5、大学生对爱情需要认识与理解,主要涉及到以下几个方面:(一) 明确学生的主要任务“放弃时间的人,时间也会放弃他。”大学时代是吸纳知识、增长才干的时期。作为当代大

22、学生,要认识到现在的任务是学习学习做人、学习知识、学习为人民服务的本领。在校大学生要集中精力,投入到学习和社会实践中,而不是因把过多的精力、时间用于谈情说爱浪费宝贵的青春年华。因此,明确自己的目标,规划自己的学习道路,合理分配好学习和恋爱的地位。(二) 树林正确的恋爱观提倡志同道合、有默契、相互喜欢的爱情:在恋人的选择上最重要的条件应该是志同道合,思想品德、事业理想和生活情趣等大体一致。摆正爱情与学习、事业的关系:大学生应该把学习、事业放在首位,摆正爱情与学习、事业的关系,不能把宝贵的大学时间,锻炼自身的时间都用于谈情说有爱而放松了学习。 相互理解、相互信任,是一份责任和奉献。爱情是奉献而不时

23、索取,是拥有而不是占有。身边的人与事时刻为我们敲响警钟,不再让悲剧重演。生命只有一次,不会重来,大学生一定要树立正确的爱情观。(三) 发展健康的恋爱行为 在当今大学校园,情侣成双入对已司空见惯。抑制大学生恋爱是不实际的,大学生一定要发展健康的恋爱行为。与恋人多谈谈学习与工作,把恋爱行为限制在社会规范内,不致越轨,要使爱情沿着健康的道路发展。正如马克思所说:“在我看来,真正的爱情是表现在恋人对他的偶像采取含蓄、谦恭甚至羞涩的态度,而绝不是表现在随意流露热情和过早的亲昵。”(四) 爱情不是一件跟风的事儿。很多大学生的爱情实际上是跟风的结果,是看到别人有了爱情,看到别人幸福的样子(注意,只是看上去很

24、美),产生了羊群心理,也就花了大把的时间和精力去寻找爱情(五) 距离才是保持爱情之花常开不败的法宝。爱情到底需要花多少时间,这是一个很大的问题。有的大学生爱情失败,不是因为男女双方在一起的时间太少,而是因为他们在一起的时间太多。相反,很多大学生恋爱成功,不是因为男女双方在一起的时间太少,而是因为他们准确地把握了在一起的时间的多少程度。(六) 爱情不是自我封闭的二人世界。很多人过分的活在两人世界,对身边的同学,身边好友渐渐的失去联系,失去了对话,生活中只有彼此两人;班级活动也不参加,社外活动也不参加,每天除了对方还是对方,这样不利于大学生健康发展,不仅影响学习,影响了自身交际和合作能力。总结:男

25、女之间面对恋爱,首先要摆正好自己的心态,树立自尊、自爱、自强、自重应有的品格,千万不要盲目地追求爱,也不宜过急追求爱,要分清自己的条件是否成熟。要树立正确的恋爱观,明确大学的目的,以学习为第一;规划好大学计划,在不影响学习的条件下,要对恋爱认真,专一,相互鼓励,相互学习,共同进步;认真对待恋爱观,做健康的恋爱;总之,我们大学生要树立正确的恋爱观念,让大学的爱情成为青春记忆里最美的风景,而不是终身的遗憾! 我的大学爱情观目录:六、 大学概念七、 分析爱情健康观八、 爱情观要三思九、 大学需要对爱情要认识和理解十、 总结1、什么是大学爱情:大学是一个相对宽松,时间自由,自己支配的环境,也正因为这样

26、,培植爱情之花最肥沃的土地。大学生恋爱一直是大学校园的热门话题,恋爱和学业也就自然成为了大学生在校期间面对的两个主要问题。恋爱关系处理得好、正确,健康,可以成为学习和事业的催化剂,使人学习努力、成绩上升;恋爱关系处理的不当,不健康,可能分散精力、浪费时间、情绪波动、成绩下降。因此,大学生的恋爱观必须树立在健康之上,并且树立正确的恋爱观是十分有必要的。因此我从下面几方面谈谈自己的对大学爱情观。2、什么是健康的爱情:4) 尊重对方,不显示对爱情的占有欲,不把爱情放第一位,不痴情过分;5) 理解对方,互相关心,互相支持,互相鼓励,并以对方的幸福为自己的满足; 6) 是彼此独立的前提下结合;3、什么是

27、不健康的爱情:1)盲目的约会,忽视了学业;2)过于痴情,一味地要求对方表露爱的情怀,这种爱情常有病态的夸张;3)缺乏体贴怜爱之心,只表现自己强烈的占有欲;4)偏重于外表的追求;4、大学生处理两人的在爱情观需要三思:3. 不影响学习:大学恋爱可以说是一种必要的经历,学习是大学的基本和主要任务,这两者之间有错综复杂的关系,有的学生因为爱情,过分的忽视了学习,把感情放在第一位;学习的时候就认真的去学,不要去想爱情中的事,谈恋爱的时候用心去谈,也可以交流下学习,互相鼓励,共同进步。4. 有足够的精力:大学生活,说忙也会很忙,但说轻松也是相对会轻松的!大学生恋爱必须合理安排自身的精力,忙于学习的同时不能

28、因为感情的事情分心,不能在学习期间,放弃学习而去谈感情,把握合理的精力,分配好学习和感情。4、 有合理的时间;大学时间可以分为学习和生活时间,合理把握好学习时间和生活时间的“度”很重要;学习的时候,不能分配学习时间去安排两人的在一起的事情,应该以学习为第一;生活时间,两人可以相互谈谈恋爱,用心去谈,也可以交流下学习,互相鼓励,共同进步。5、大学生对爱情需要认识与理解,主要涉及到以下几个方面:(七) 明确学生的主要任务“放弃时间的人,时间也会放弃他。”大学时代是吸纳知识、增长才干的时期。作为当代大学生,要认识到现在的任务是学习学习做人、学习知识、学习为人民服务的本领。在校大学生要集中精力,投入到

29、学习和社会实践中,而不是因把过多的精力、时间用于谈情说爱浪费宝贵的青春年华。因此,明确自己的目标,规划自己的学习道路,合理分配好学习和恋爱的地位。(八) 树林正确的恋爱观提倡志同道合、有默契、相互喜欢的爱情:在恋人的选择上最重要的条件应该是志同道合,思想品德、事业理想和生活情趣等大体一致。摆正爱情与学习、事业的关系:大学生应该把学习、事业放在首位,摆正爱情与学习、事业的关系,不能把宝贵的大学时间,锻炼自身的时间都用于谈情说有爱而放松了学习。 相互理解、相互信任,是一份责任和奉献。爱情是奉献而不时索取,是拥有而不是占有。身边的人与事时刻为我们敲响警钟,不再让悲剧重演。生命只有一次,不会重来,大学

30、生一定要树立正确的爱情观。(九) 发展健康的恋爱行为 在当今大学校园,情侣成双入对已司空见惯。抑制大学生恋爱是不实际的,大学生一定要发展健康的恋爱行为。与恋人多谈谈学习与工作,把恋爱行为限制在社会规范内,不致越轨,要使爱情沿着健康的道路发展。正如马克思所说:“在我看来,真正的爱情是表现在恋人对他的偶像采取含蓄、谦恭甚至羞涩的态度,而绝不是表现在随意流露热情和过早的亲昵。”(十) 爱情不是一件跟风的事儿。很多大学生的爱情实际上是跟风的结果,是看到别人有了爱情,看到别人幸福的样子(注意,只是看上去很美),产生了羊群心理,也就花了大把的时间和精力去寻找爱情(十一) 距离才是保持爱情之花常开不败的法宝

31、。爱情到底需要花多少时间,这是一个很大的问题。有的大学生爱情失败,不是因为男女双方在一起的时间太少,而是因为他们在一起的时间太多。相反,很多大学生恋爱成功,不是因为男女双方在一起的时间太少,而是因为他们准确地把握了在一起的时间的多少程度。(十二) 爱情不是自我封闭的二人世界。很多人过分的活在两人世界,对身边的同学,身边好友渐渐的失去联系,失去了对话,生活中只有彼此两人;班级活动也不参加,社外活动也不参加,每天除了对方还是对方,这样不利于大学生健康发展,不仅影响学习,影响了自身交际和合作能力。总结:男女之间面对恋爱,首先要摆正好自己的心态,树立自尊、自爱、自强、自重应有的品格,千万不要盲目地追求爱,也不宜过急追求爱,要分清自己的条件是否成熟。要树立正确的恋爱观,明确大学的目的,以学习为第一;规划好大学计划,在不影响学习的条件下,要对恋爱认真,专一,相互鼓励,相互学习,共同进步;认真对待恋爱观,做健康的恋爱;总之,我们大学生要树立正确的恋爱观念,让大学的爱情成为青春记忆里最美的风景,而不是终身的遗憾!

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

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号