《游戏脚本编程》PPT课件.pptx

上传人:wuy****n92 文档编号:80475047 上传时间:2023-03-23 格式:PPTX 页数:43 大小:942.47KB
返回 下载 相关 举报
《游戏脚本编程》PPT课件.pptx_第1页
第1页 / 共43页
《游戏脚本编程》PPT课件.pptx_第2页
第2页 / 共43页
点击查看更多>>
资源描述

《《游戏脚本编程》PPT课件.pptx》由会员分享,可在线阅读,更多相关《《游戏脚本编程》PPT课件.pptx(43页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第13章 游戏中的脚本编程浙江大学软件学院梁秀波Email:Lua简介Lua语法Lua与C+通信Lua在Cocos2d-x中的应用游戏脚本编程实例守卫宝箱小结主要内容Lua 是一个小巧的脚本语言,由巴西里约热内卢天主教大学的一个研究小组于1993年开发。最初Lua语言是为能与C语言或其他常用语言编写的软件相互集成而设计的,为应用程序提供灵活的扩展和定制功能。Lua由标准C编写,几乎在所有操作系统和平台上都可以编译,运行。Lua语言没有C语言已经拥有的功能,而是完善了C语言所不具备的功能,不适合作为开发独立应用程序的语言。Lua 拥有可以实现同时进行的JIT(Just In Time)项目,提供

2、在特定平台上的即时编译功能。Lua简介Lua拥有四大特性:简易性简单小巧,概念不多,数据类型少,语法简单,使用方便,易于维护可扩展性用于构建特定语言的扩展工具包用Lua代码、C语言代码来扩展高效性脚本语言中最快的语言之一可移植性跨平台可以被C/C+的代码调用可以调用C/C+的函数Lua简介Lua语法数值与类型表达式语句函数Lua脚本语言是一门动态弱类型的语言,程序中不需要声明变量类型便可以直接使用。Lua语言的基本数据类型包括8种nil、boolean、number、string、function、table、thread和userdata数值与类型nil 空类型用于与其他值区别,先创建的变量

3、默认值为空,将全局变量赋空值就等于删除它boolean 布尔型有“true”和“false”两个值“nil”和“false”值为“假”,除了“nil”和“false值以外的所有其他任何值均为“真”number 数值型用于表示双精度浮点数(实数),可以表示任何32位整数,没有整数类型string 字符串型用于表示字符串序列,一旦被创建便不可以改变可以通过“.”操作符连接两字符串可以在字符串的前面放“#”操作符来获得字符串的长度数值与类型function 函数型函数也是一个类型,函数可以为变量赋值,可以作为参数,可以作为其他函数的返回值table 表类型Lua语言中唯一的数据结构可以通过整数、字符

4、串或者其他类型的值(nil除外)来索引没用固定的大小,可以任意添加元素。最简单的构造表达式是用来创造空表的空构造式。thread 线程类型用于与独立线程区别,实现协同程序userdata 自定义类型用于表示新类型(指由C语言库或应用程序创建),可以将C语言的数据存到Lua变量中数值与类型修改字符串内容,利用gsub函数将字符串str1中的“Lua”改为“World”并赋值给新的字符串str2中:在Lua语言中有两种注释方式,单行注释有两个小横线(-)实现,多行注释是以“-”开始,以“-”结束,中间的内容为注释。上面的代码片段就是采用了单行注释的方式,将输出的内容列举了出来。数值与类型str1=

5、HelloLuastr2=string.gsub(str1,Lua,World)print(str1)-HelloLuaprint(str2)-HelloWorld在Lua语言中,可以为一个变量赋不同类型的值,type函数可以检查传来的参数的类型:数值与类型print(type(nil)-nilprint(type(false)-booleana=3.14print(type(a)-numbera=printa(type(a)-functiona=HelloLuaprint(type(a)-string表类型table-是Lua语言中唯一的数据结构-是Lua语言与其他编程语言的不同之处-表类型

6、与其他编程语言中的数组或者容器类似,不仅可以通过整数的方式索引,还可通过字符串或者其他类型的值(nil除外)来索引-table没用固定的大小,可以任意添加元素,这些元素可以是相同类型的对象,也可以是不同类型的对象。-table是通过“构造表达式”创建和初始化的,是Lua独特的、最实用的一种表达式。最简单的构造表达式是用来创造空表的空构造式。数值与类型表类型table-利用空构造式来创建一个table,并添加元素,如下:数值与类型print(type(nil)-nilprint(type(false)-booleana=3.14print(type(a)-numbera=printa(type(

7、a)-functiona=HelloLuaprint(type(a)-string表类型table-利用构造式还可以初始化table,与其他语言不同的是,Lua的索引是从1开始,示例如下:-Lua还提供了一种较特殊的语法创建和初始化table,并对创建好的table进行类型检查,示例如下:数值与类型months=January,February,March,April,May,June,July,August,September,October,November,Decemberprint(months4)-Apriltb=t1=string1,t2=string2,t3=111print(t

8、ype(tb)-table访问表中内容的方式有两种,以上面已经创建好的表为例,一种是形如tb.t1,另一种是tb“t1”。向刚刚新建好的表中添加元素的示例如下:数值与类型tb.t4=printtbt5=112print(type(tbt4)-functionprint(tb.t5)-112同全局变量类似,当引用的值不在表中,它的值就会输出“nil”,若希望删除表中的某个元素,就给它赋“nil”值即可,利用“#”长度操作符可以返回表中的最后一个值:数值与类型tb=t1=string1,t2=string2,t3=111,t4=print,t5=112tbt5=nilprint(tbt5)-nil

9、print(tbt6)-nilprint(tb#tb)-niltb#tb+1=newstringprint(tb#tb)-newstringLua中的表达式中包括-常量-变量-字符串-一元运算符-二元运算符-函数调用-表构造-函数定义 表达式1.算术运算符一元运算符“-”(负值)二元运算符“+”、“-”、“*”、“/”、“”、“%”只能用于操作数值类型,不能用于其他类型的变量中2.关系运算符“”、“=”、“=”、“=”(不等于)这些关系运算符的返回值均为“true”或者“false”在比较过程中,如果两个操作数类型不同,则返回值为“false”3.逻辑运算符“and”、“or”、“not”“f

10、alse”和“nil”均当作假,其他值均为真4.连接运算符“.”(两个点)。如果连接的字符串中有数字,连接运算符需要与前面的数字之间有一个空格,Lua会自动将这个数字转换成字符串表达式逻辑运算符连接运算符连接运算符表达式示例print(0and1);-1print(0andnil);-nilprint(falseand0);-falseprint(0or1);-0print(0ornil);-0print(falseor0);-0print(Hello.Lua)-HelloLuaprint(1.2)-12运算符优先级表达式优先级优先级运算符运算符结合方式结合方式高低(幂)右结合not、#、-(

11、负值)左结合*、/、%左结合+、-(减法)左结合.(连接)右结合、=、=、=左结合and左结合or左结合赋值语句赋值的基本操作是改变变量的值或者table中一个字段的值允许多重赋值控制结构语句if 语句while 语句repeat-until语句for语句(数字型for,泛型for)全局变量与局部变量用于与独立线程区别,实现协同程序语句赋值的基本操作是改变变量的值或者table中一个字段的值,例如:允许多重赋值语句赋值语句示例str=Hello.Luaprint(str)-HelloLuatb=t1=string1,t2=string2,t3=111tb.t1=newstring”print(

12、tb.t1)-newstringa,b=10,Helloprint(a)-10print(b)-Helloa,b=b,a-交换了a,b的值print(a)-Helloprint(b)-10if 语句-与C语言相似,Lua中的if语句也要首先判断条件的真假,然后执行then之后的语句或者else后的语句,else部分可有可无,根据需要自行添加,如下:语句控制条件语句示例ifa=nilthenprint(a)end-输出nilx=3y=4ifx=ythenprint(x)elseprint(y)end-输出4if 语句if语句还可以嵌套使用,这时要用到elseif,这里的elseif与C语言中的不

13、同,要连在一起无空格,如下:要尤其注意的是Lua语言并不支持C语言中的switch语句,如果希望实现switch语句的功能,可以叠加多个elseif语句来实现。语句控制条件语句示例a=-1ifa=0thenprint(0)elseifa0thenprint(1)elseprint(-1)end-输出-1while 语句Lua语言中的while语句与其他编程语言中的while语句一样,首先测试while的条件,如果测试条件为真,则继续执行循环体的内容,如果测试条件为假,则跳过循环体,继续向下执行。下面就利用while循环实现逆序输出1到10,如下:语句控制条件语句示例a=10whilea0dop

14、rint(a)a=a-1endrepeat-until语句功能是反复执行循环体内的语句,直到until测试的条件为真,则循环结束。与while语句不同的是repeat-until语句的循环体至少会执行一次,并且在循环体内部声明的局部变量在until的测试条件语句中依旧有效。下面利用repeat-until语句实现逆序输出1到10,如下:语句控制条件语句示例a=10repeatprint(a)a=a-1untila0for语句(数字型for)-语法模板:-解释:var将以exp3的步长从exp1变化到exp2,并执行一次循环体。当表达式exp3的值为1时,表达式exp3可以省略不写(默认步长为1

15、)。for的三个表达式的求值是在循环执行前一次完成,且仅会执行一次。控制变量var是局部变量,仅在循环体内有效,当循环结束后便不存在。语句控制条件语句示例for var=exp1,exp2,exp3 doendfor语句(数字型for)-以步长为1(默认)和-1为例,实现正序和逆序输出1到10,如下:语句控制条件语句示例fora=1,10do-等价于fora=1,10,1doprint(a)end-正序输出fora=10,1,-1doprint(a)end-逆序输出for语句(泛型for)-语法模板:-解释:ipairs函数是由Lua语言提供的一个用于遍历数组的迭代器函数。在每次循环过程中,v

16、ar1会被赋一个索引值,var2会被赋一个对应该索引的数组元素。泛型for的执行过程是:1.初始化in后表达式,表达式会返回迭代函数、状态常量和控制变量3个值;2.将状态常量和控制变量作为参数,传给迭代函数;3.将迭代函数的返回值,赋值给变量列表;4.如果迭代函数的返回值的第一个返回值为“nil”,则结束循环,反之循环继续,继续执行第二步。语句控制条件语句示例for var1,var2 in ipairs(var3)do endfor语句(泛型for)-利用泛型for循环将months数组的元素,并将其输出,如下:语句控制条件语句示例months=January,February,March,

17、April,May,June,July,August,September,October,November,Decemberfor i,v in ipairs(months)do print(v)end全局变量按作用域划分,变量分为全局变量和局部变量。全局变量没有关键字修饰,局部变量需要用local关键字来声明。全局变量不需要声明,使用时直接赋值即可使变量成为全局变量。访问一个没有被初始化的全局变量,不会报错,访问的结果是“nil”。删除全局变量仅需将其赋“nil”。语句全局变量与局部变量print(a)-a=nila=1print(a)-a=1a=nilprint(q)-a=nil局部变量局

18、部变量的声明需要有local关键字来修饰;作用域局限于声明它的代码块中、函数内、控制结构中;代码块是由一系列语句组成,可以是单一语句、多个语句的组合、函数。语句全局变量与局部变量a=100for a=0,10 do local sum=10-a -这里的a和sum均为局部变量,屏蔽了全局变量a print(sum)endprint(a)-100 全局变量print(sum)-nil 未定义全局变量和局部变量的不同:-声明方式-作用域局部变量比较全局变量存在两大优势:-可以避免命名冲突-访问速度更快语句全局变量与局部变量函数可作为赋值表达式、或调用语句使用。函数在定义时需要用到关键字functi

19、on,要写清函数名和函数体,参数和返回值可选。在参数的传递过程当中,若实参的个数多于形参的个数,则舍弃多余的实参;反之,若实参个数不足,则将多出的形参赋“nil”值。函数编写一个求和的函数sum,对传来的数组中的元素求和并返回,输出,实现如下:函数示例function add(a)local sum=0for i,v in ipairs(a)dosum=sum+vendreturn sumenda=1,2,3sum=add(a)print(sum)-sum=6多返回值函数Lua语言中函数允许多返回值。实现:只要在return后列出返回值的列表,就可以实现多返回值,这是Lua语言函数的一大特色。

20、Lua会根据不同的调用情况来调整返回值的数量。可变参数函数可以接收不同个数的的实参,如:print函数。实现:在参数列表中写上“.”(三个点),这三个点表示任意个数的实参。函数函数多返回值函数示例functionfunc0()returna,b,cendvar1=func0()print(var1)-var1=a,b和c舍弃var1,var2,var3=1,func0()print(var1,var2,var3)-var1=1,var2=a,var3=b,c舍弃var1,var2,var3=func0(),1print(var1,var2,var3)-var1=a,var2=1,var3=ni

21、l,b和c舍弃var1,var2,var3,var4=func0()print(var1,var2,var3,var4)-var1=a,var2=b,var3=c,var3=nilvar1,var2=(func0()print(var1,var2)-var1=a,var2=nil函数可变参数函数示例functionfunc1(var1,var2,.)print(var1,var2)print(.)endfunc1(1)-var1=1,var2=nil,arg=n=0func1(1,2)-var1=1,var2=2,arg=n=0func1(1,2,3,4,5)-var1=1,var2=2,ar

22、g=3,4,5;n=3functionfunc2(.)localvar1,var2,var3=.print(var1,var2,var3)print(.)endfunc2(a,b,c,d,e,f)-arg=a,b,c,d,e,f;n=6-var1=a,var2=b,var3=c-var1=a,var2=b,var3=c,var4=d,var5=e,var6=fLua语言是一种快速的嵌入式脚本语言,依赖于C/C+等宿主语言存在。因此,Lua语言的运用,离不开与宿主语言之间的通信。Lua与C+通信包括:Lua调用C+与C+调用Lua。C+与Lua之间的通信互相传递操作数和操作码的过程涉及堆栈和全局

23、表。堆栈:后进先出的数据结构,用于存储数据。全局表:维护变量及其对应关系,类似一一映射的哈希表。Lua与C+通信在Cocos2d-x引擎中,Lua主要用于游戏应用层的开发。在Cocos2d-x中,Lua大量调用C+函数:Lua修改后的代码不需要重新编译即可生效,这样能够显著提高游戏开发效率。Lua在Cocos2d-x中的应用游戏简介通过触摸屏幕改变炮管角度,瞄准敌人,发射炮弹,阻止敌人接近宝箱,如果敌人越过宝箱,则游戏结束。游戏脚本编程实例守卫宝箱游戏制作步骤-使用TiledMap编辑地图并加载-添加玩家以及播放简单帧动画-添加砖块左边和屏幕坐标转化-增加角色跳动效果-碰撞检测-判断游戏输赢游戏脚本编程实例守卫宝箱游戏最终效果图 说明:游戏详细设计见实验手册游戏脚本编程实例守卫宝箱本章主要介绍了最常用的游戏脚本语言Lua,包括Lua脚本语言的基础语法等。针对游戏开发的需要,介绍了Lua与C+之间的调用和Lua在Cocos2d-x中的应用。小结

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁