chapter13游戏脚本编程.pptx_第1页
chapter13游戏脚本编程.pptx_第2页
chapter13游戏脚本编程.pptx_第3页
chapter13游戏脚本编程.pptx_第4页
chapter13游戏脚本编程.pptx_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第13章 游戏中的脚本编程 浙江大学软件学院 梁秀波 Email: Lua简介 Lua语法 Lua与C+通信 Lua在Cocos2d-x中的应用 游戏脚本编程实例守卫宝箱 小结 主要内容 Lua 是一个小巧的脚本语言,由巴西里约热内卢天主教大学 的一个研究小组于1993年开发。 最初Lua语言是为能与C语言或其他常用语言编写的软件相 互集成而设计的,为应用程序提供灵活的扩展和定制功能。 Lua由标准C编写,几乎在所有操作系统和平台上都可以编 译,运行。 Lua语言没有C语言已经拥有的功能,而是完善了C语言所不 具备的功能,不适合作为开发独立应用程序的语言。 Lua 拥有可以实现同时进行的JIT(Just In Time)项目,提 供在特定平台上的即时编译功能。 Lua简介 Lua拥有四大特性: 简易性 简单小巧,概念不多,数据类型少,语法简单,使用方便,易于维护 可扩展性 用于构建特定语言的扩展工具包 用Lua代码、C语言代码来扩展 高效性 脚本语言中最快的语言之一 可移植性 跨平台 可以被C/C+的代码调用 可以调用C/C+的函数 Lua简介 Lua语法 数值 与 类型 表达式 语句 函数 Lua脚本语言是一门动态弱类型的语言,程 序中不需要声明变量类型便可以直接使用。 Lua语言的基本数据类型包括8种 nil、boolean、number、string、 function、table、thread和userdata 数值与类型 nil 空类型 用于与其他值区别,先创建的变量默认值为空,将全局变量赋空值就等于删除它 boolean 布尔型 有“true”和“false”两个值 “nil”和“false”值为“假”,除了“nil”和“false值以外的所有其 他任何值均为“真” number 数值型 用于表示双精度浮点数(实数),可以表示任何32位整数,没有整数类 型 string 字符串型 用于表示字符串序列,一旦被创建便不可以改变 可以通过“”操作符连接两字符串 可以在字符串的前面放“#”操作符来获得字符串的长度 数值与类型 function 函数型 函数也是一个类型,函数可以为变量赋值,可以作为参数,可以作为其他函数的 返回值 table 表类型 Lua语言中唯一的数据结构 可以通过整数、字符串或者其他类型的值(nil除外)来索引 没用固定的大小,可以任意添加元素。 最简单的构造表达式是用来创造空表的空构造式。 thread 线程类型 用于与独立线程区别,实现协同程序 userdata 自定义类型 用于表示新类型(指由C语言库或应用程序创建),可以将C语言的数据存到Lua 变量中 数值与类型 修改字符串内容,利用gsub函数将字符串str1中的“Lua”改为 “World”并赋值给新的字符串str2中: 在Lua语言中有两种注释方式,单行注释有两个小横线(-)实现,多行注释是以“ -”开始,以“-”结束,中间的内容为注释。上面的代码片段就是采用了单行 注释的方式,将输出的内容列举了出来。 数值与类型 str1 = “Hello Lua“ str2 = string.gsub(str1 , “Lua“, “World“) print(str1)-Hello Lua print(str2)-Hello World 在Lua语言中,可以为一个变量赋不同类型的值,type函数可以检查传 来的参数的类型 : 数值与类型 print(type(nil) -nil print(type(false) -boolean a = 3.14 print(type(a) -number a = print a(type(a) -function a = “Hello Lua“ print(type(a) -string 表类型table - 是Lua语言中唯一的数据结构 - 是Lua语言与其他编程语言的不同之处 - 表类型与其他编程语言中的数组或者容器类似,不仅可以通过整数的方式索 引,还可通过字符串或者其他类型的值(nil除外)来索引 - table没用固定的大小,可以任意添加元素,这些元素可以是相同类型的对 象,也可以是不同类型的对象。 - table是通过“构造表达式”创建和初始化的,是Lua独特的、最实用的一种 表达式。最简单的构造表达式是用来创造空表的空构造式。 数值与类型 表类型table -利用空构造式来创建一个table,并添加元素,如下: 数值与类型 print(type(nil) -nil print(type(false) -boolean a = 3.14 print(type(a) -number a = print a(type(a) -function a = “Hello Lua“ print(type(a) -string 表类型table -利用构造式还可以初始化table,与其他语言不同的是,Lua的索引 是从1开始,示例如下: -Lua还提供了一种较特殊的语法创建和初始化table,并对创建好的 table进行类型检查,示例如下: 数值与类型 months = “January“, “February“, “March“, “April“, “May“, “June“, “July“, “August“, “September“, “October“, “November“, “December“ print(months4)-April tb = t1 =“string1“,t2=“string2“,t3 = 111 print(type(tb)-table 访问表中内容的方式有两种,以上面已经创建好的表为例,一种是形如 tb.t1,另一种是tb“t1”。向刚刚新建好的表中添加元素的示例如下 : 数值与类型 tb.t4 = print tb“t5“ = 112 print(type(tb“t4“)-function print(tb.t5)-112 同全局变量类似,当引用的值不在表中,它的值就会输出“nil”,若希 望删除表中的某个元素,就给它赋“nil”值即可,利用“#”长度操作 符可以返回表中的最后一个值: 数值与类型 tb = t1 =“string1“,t2=“string2“,t3 = 111,t4=print,t5=112 tb“t5“ = nil print(tb“t5“)-nil print(tb“t6“)-nil print(tb#tb)-nil tb#tb+1 = “new string“ print(tb#tb)-new string Lua中的表达式中包括 - 常量 - 变量 - 字符串 - 一元运算符 - 二元运算符 - 函数调用 - 表构造 - 函数定义 表达式 1.算术运算符 一元运算符“-”(负值) 二元运算符“+”、“-”、“*”、“/”、“”、“%” 只能用于操作数值类型,不能用于其他类型的变量中 2.关系运算符 “”、“=”、“=”、“=”(不等于) 这些关系运算符的返回值均为“true”或者“false” 在比较过程中,如果两个操作数类型不同,则返回值为“false” 3.逻辑运算符 “and”、“or”、“not” “false”和“nil”均当作假,其他值均为真 4.连接运算符 “”(两个点)。 如果连接的字符串中有数字,连接运算符需要与前面的数字之间有一个空格,Lua会 自动将这个数字转换成字符串 表达式 逻辑运算符 连接运算符 表达式示例 print(0 and 1); -1 print(0 and nil); -nil print(false and 0); -false print(0 or 1); -0 print(0 or nil); -0 print(false or 0); -0 print(“Hello“Lua“) -Hello Lua print(1 2)-12 运算符优先级 表达式 优先级运算符结合方式 高 低 (幂)右结合 not、#、-(负值)左结合 *、/、%左结合 +、-(减法)左结合 (连接)右结合 、=、= 、= 左结合 and左结合 or左结合 赋值语句 赋值的基本操作是改变变量的值或者table中一个字段的值 允许多重赋值 控制结构语句 if 语句 while 语句 repeat-until语句 for语句(数字型for,泛型for) 全局变量与局部变量 用于与独立线程区别,实现协同程序 语句 赋值的基本操作是改变变量的值或者table中一个字段的值 ,例如: 允许多重赋值 语句赋值语句示例 str = “Hello“ Lua“ print(str)-Hello Lua tb = t1 =“string1“,t2=“string2“,t3 = 111 tb.t1 = “new string” print(tb.t1)-new string a,b = 10,“Hello“ print(a)-10 print(b)-Hello a,b = b,a-交换了a,b的值 print(a)-Hello print(b)-10 if 语句 - 与C语言相似,Lua中的if语句也要首先判断条件的真假,然后执行 then之后的语句或者else后的语句,else部分可有可无,根据需要 自行添加,如下: 语句控制条件语句示例 if a =nil then print(a) end-输出nil x = 3 y = 4 if x = y then print(x) else print(y) end-输出4 if 语句 if语句还可以嵌套使用,这时要用到elseif,这里的elseif与C语言中的 不同,要连在一起无空格,如下: 要尤其注意的是Lua语言并不支持C语言中的switch语句,如果希望 实现switch语句的功能,可以叠加多个elseif语句来实现。 语句控制条件语句示例 a=-1 if a = 0 then print(0) elseif a 0 then print(1) else print(-1) end-输出-1 while 语句 Lua语言中的while语句与其他编程语言中的while语句一样,首先测 试while的条件,如果测试条件为真,则继续执行循环体的内容,如 果测试条件为假,则跳过循环体,继续向下执行。下面就利用while 循环实现逆序输出1到10,如下: 语句控制条件语句示例 a = 10 while a0 do print(a) a = a-1 end repeat-until语句 功能是反复执行循环体内的语句,直到until测试的条件为真,则循 环结束。与while语句不同的是repeat-until语句的循环体至少会执 行一次,并且在循环体内部声明的局部变量在until的测试条件语句 中依旧有效。下面利用repeat-until语句实现逆序输出1到10,如下 : 语句控制条件语句示例 a = 10 repeat print(a) a = a-1 until a end for语句(数字型for) -以步长为1(默认)和-1为例,实现正序和逆序输出1到10,如下: 语句控制条件语句示例 for a = 1,10 do -等价于for a = 1,10,1 do print(a) end-正序输出 for a = 10,1,-1 do print(a) end-逆序输出 for语句(泛型for) -语法模板: -解释: ipairs函数是由Lua语言提供的一个用于遍历数组的迭代器函数。在每次 循环过程中,var1会被赋一个索引值,var2会被赋一个对应该索引的数 组元素。 泛型for的执行过程是: 1.初始化in后表达式,表达式会返回迭代函数、状态常量和控制变量3个值; 2.将状态常量和控制变量作为参数,传给迭代函数; 3.将迭代函数的返回值,赋值给变量列表; 4.如果迭代函数的返回值的第一个返回值为“nil”,则结束循环,反之循环继 续,继续执行第二步。 语句控制条件语句示例 for var1,var2 in ipairs(var3) do end for语句(泛型for) -利用泛型for循环将months数组的元素,并将其输出,如下: 语句控制条件语句示例 months = “January“, “February“, “March“, “April“, “May“, “June“, “July“, “August“, “September“, “October“, “November“, “December“ for i,v in ipairs(months) do print(v) end 全局变量 按作用域划分,变量分为全局变量和局部变量。 全局变量没有关键字修饰,局部变量需要用local关键字来声明。 全局变量不需要声明,使用时直接赋值即可使变量成为全局变量。 访问一个没有被初始化的全局变量,不会报错,访问的结果是 “nil”。 删除全局变量仅需将其赋“nil”。 语句全局变量与局部变量 print(a) -a = nil a = 1 print(a) -a = 1 a = nil print(q) -a = nil 局部变量 局部变量的声明需要有local关键字来修饰; 作用域局限于声明它的代码块中、函数内、控制结构中; 代码块是由一系列语句组成,可以是单一语句、多个语句的组合、 函数。 语句全局变量与局部变量 a = 100 for a = 0,10 do local sum = 10-a -这里的a和sum均为局部变量,屏蔽了全局变 量a print(sum) end print(a)-100 全局变量 print(sum)-nil 未定义 全局变量和局部变量的不同: -声明方式 -作用域 局部变量比较全局变量存在两大优势: -可以避免命名冲突 -访问速度更快 语句全局变量与局部变量 函数可作为赋值表达式、或调用语句使用。 函数在定义时需要用到关键字function,要写清函数名和函 数体,参数和返回值可选。 在参数的传递过程当中,若实参的个数多于形参的个数,则 舍弃多余的实参;反之,若实参个数不足,则将多出的形参 赋“nil”值。 函数 编写一个求和的函数sum,对传来的数组中的元素求和并返 回,输出,实现如下: 函数示例 function add(a) local sum = 0 for i,v in ipairs(a) do sum = sum + v end return sum end a=1,2,3 sum = add(a) print(sum)-sum = 6 多返回值函数 Lua语言中函数允许多返回值。 实现:只要在return后列出返回值的列表,就可以实现多返回值, 这是Lua语言函数的一大特色。 Lua会根据不同的调用情况来调整返回值的数量。 可变参数函数 可以接收不同个数的的实参,如:print函数。 实现:在参数列表中写上“.”(三个点),这三个点表示任意个数 的实参。 函数 函数多返回值函数示例 function func0() return “a“,“b“,“c“ end var1 = 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(),1 print(var1,var2,var3)-var1=“a“, var2=1, var3=nil,“b“和“c“舍弃 var1,var2,var3,var4 = func0() print(var1,var2,var3,var4)-var1=“a“, var2=“b“, var3=“c“, var3=nil var1,var2 = (func0() print(var1,var2) -var1=“a“,var2=nil 函数可变参数函数示例 function func1(var1,var2,.) print(var1,var2) print(.) end func1(1)-var1=1,var2=nil,arg=n=0 func1(1,2)-var1=1,var2=2,arg=n=0 func1(1,2,3,4,5)-var1=1,var2=2,arg=3,4,5;n=3 function func2(.) local var1,var2,var3 = .

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论