Lua游戏开发
Lua 游戏开发
Lua 语言因其结构和语法的简洁性而在各类游戏引擎中被广泛使用。游戏对图形画面要求非常苛刻,这无疑需消耗大量的内存空间,而这些内存空间的管理是非常棘手的问题。Lua 语言有自动的垃圾回收机制,这种自动化的内存管理机制也使得 Lua 受到游戏引擎开发者的青睐。著名的 Lua 游戏引擎主要包括:
Cornoa SDK
Gideros Mobile
ShiVa3D
Moai SDK
LOVE
CryEngine
上面每一个游戏引擎都是基于 Lua 的,并且每一个都提供了丰富的 API。我们下面看一下每一款游戏引擎的特点。
Corna SDK
这是一款支持 iPhone,iPad,Android 平台的移动设备游戏引擎。它提供了一个免费版本的 SDK, 不过该免费版本的功能也受到限制。你可以在需要的时候升级到其它版本。
Gorona SDK 提供了如下的特征:
物理与冲突处理接口
Web 和网络接口
游戏网络接口
广告接口
数据分析接口
数据库和文件处理接口
加密和数学计算接口
音频和多媒体接口
相比于使用 iOS 或 Android ...
Lua协程
Lua 协程
概述
协程具有协同的性质,它允许两个或多个方法以某种可控的方式协同工作。在任何一个时刻,都只有一个协程在运行,只有当正在运行的协程主动挂起时它的执行才会被挂起(暂停)。
上面的定义可能看上去比较模糊。接下来让我讲得很清楚一点,假设我们有两个方法,一个是主程序方法,另一个是一个协程。当我们使用 resume 函数调用一个协程时,协程才开始执行。当在协程调用 yield 函数时,协程挂起执行。再次调用 resume 函数时,协程再从上次挂起的地方继续执行。这个过程一直持续到协程执行结束为止。
协程中可用的函数
下面的表中列出 Lua 语言为支持协程而提供的所有函数以及它们的用法。
S.N.
方法和功能
1
coroutine.create(f):用函数 f 创建一个协程,返回 thread 类型对象。
2
coroutine.resume(co[,val1,...]): 传入参数(可选),重新执行协程 co。此函数返回执行状态,也可以返回其它值。
3
coroutine.running():返回正在运行的协程 ...
Break语句
#break 语句
程序在解释执行过程中,在循环内遇到 break 语句时,循环将立即结束。程序将循环语句的下一条语句开始执行。
如果你是在嵌套循环(即,一个循环内还有一个循环语句)内使用 break 语句,break 只结束内层循环,并从该代码块后的第一条语句处开始执行。
语法
break 语句的语法如下所示:
break;
流程图:
示例
--[ 局部变量定义--]
a = 10
--[ 执行 while 循环--]
while( a < 20 )
do
print("value of a:", a)
a=a+1
if( a > 15)
then
--[ terminate the loop using break statement --]
break
end
end
执行上面的代码可以得到如下的结果:
value of a: 10
value of a: 11
value of a: 12
value of a: 13
value of a: 14
value of a: 15
Lua函数
Lua 函数
函数用于将一组语句组合起来完成一个任务。你可以将你的代码分割到不同的函数中。如何将你的代码分到不同的函数中完全由你自己决定,不过一般会按照逻辑功能进行划分,每个函数都执行一个特定的任务。
在 Lua 中提供了大量的内置函数供我们使用。例如,print() 函数用于将输入的参数输出到终端。
函数往往也被称作方法,子例程或过程等等。
函数定义
Lua 中函数定义的语法如下所示:
optional_function_scope function function_name( argument1, argument2, argument3..., argumentn)
function_body
return result_params_comma_separated
end
Lua 中函数定义包括函数头和函数名两部分。如下列出函数的所有部分:
可选的函数作用域:你可以使用关键字 local 限制函数的作用域,你也可以忽略此部分而使用默认值。函数作用域默认是全局。
函数名:函数的真正名称。函数名与函数的参数列表一起被称为函数签名。
参数:一个参数就一个占位符一样。函数 ...
概述
概述
Lua 是用 C 语言开发的可扩展的轻量级编程语言。它起源于 1993 年由 Roberto lerusalimschy,Luiz Henrique de Figueiredo 与 Waddemar Celes 领导的一个内部项目。
设计者的初衷是希望 Lua 可以成为一款整合 C 语言代码以及其它传统语言代码的软件。这种整合会带来很多好处,它让你不需要重复做 C 语言已经做的很好的工作,而专注于提供那些 C 语言不擅长的特性:提供更高的抽象(离硬件更远)、动态结构、无冗余、易于测试与调试。为了提供这些特性,Lua 提供了安全的环境、动态内存管理,以及擅长处理字符串和其它动态大小数据结构的工具。
特点
Lua 有着许多自身的特点使得它与其它编程语言不同。主要包括:
可扩展性
简单
高效
跨平台
自由与开放
示例代码
print("Hello World!")
Lua 是如何实现的
Lua 主要包括两个部分:Lua 解释器部分以及运行软件系统。 运行软件系统是真正解释执行由 Lua 语言编写的程序的应用程序(译注:此处 L ...
Lua标准库
Lua 标准库
Lua 标准库利用 C 语言 API 实现并提供了丰富的函数,它们内置于 Lua 语言中。该标准库不仅可以提供 Lua 语言内服务,还能提供外部服务,比如文件或数据库的操作。
这些标准库使用标准的 C API 接口实现,它们作为独立的 C 语言模块提供给使用者。主要包括以下的内容:
基本库,包括协程子库
模块库
字符串操作
表操作
数学计算库
文件输入与输出
操作系统工具库
调试工具库
基本库
在本教程中,我们已经在很多地方都使用了基本库的内容。下面的表中列出了相关的函数与链接。
S.N.
库或者方法
1
错误处理库,包括错误处理函数,比如 assert,error等,详见错误处理。
2
内存管理,包括与垃圾回收相关的自动内存管理的内容,详见垃圾回收。
3
dofile([filename]),打开指定文件,并将文件内容作为代码执行。如果没有传入参数,则函数执行标准输入的内容。错误会传递至函数调用者。
4
_G,全局变量,它存储全局的环境。Lua 本身不使用此变量。
...
数据类型
数据类型
Lua 是动态类型编程语言,变量没有类型,只有值才有类型。值可以存储在变量中,作为参数传递或者作为返回值。
尽管在 Lua 中没有变量数据类型,但是值是有类型的。下面的列表中列出了数据类型:
值类型
描述
nil
用于区分值是否有数据,nil 表示没有数据。
boolean
布尔值,有真假两个值,一般用于条件检查。
number
数值,表示实数(双精度浮点数)。
string
字符串。
function
函数,表示由 C 或者 Lua 写的方法。
userdata
表示任意 C 数据。
thread
线程,表示独立执行的线程,它被用来实现协程。
table
表,表示一般的数组,符号表,集合,记录,图,树等等,它还可以实现关联数组。它可以存储除了 nil 外的任何值。
type 函数
Lua 中有一个 type 函数,它可以让我们知道变量的类型。下面的代码中给出了一些例子:
print(type("What is my typ ...
数组
Lua 数组
数组是一组有序的对象排列,既可以是一维的也可以是多维的。
在 Lua 语言中,数组是用整数索引表实现的。数组的大小并不固定,随着数组元素的增加,它可以动态地增加内存空间大小。
一维数组
一维数组可以使用一个简单的表结构表示。可以通过一个简单循环初始化数组或者读取数组中数据。示例代码如下所示:
array = {"Lua", "Tutorial"}
for i= 0, 2 do
print(array[i])
end
执行上面的代码可以得到如下的输出结果:
nil
Lua
Tutorial
从上面的例子中可以看出,当我们尝试着访问数组中一个不存在的索引时,会得到 nil 值。 Lua 语言与 C 语言不同,Lua 数组的索引是从 1 开始的,而 C 语言中索引是从 0 开始的。不过呢,你也可以在索引值为 0 或小于 0 的位置创建对象。下面的代码演示了如何使用负索引值创建并初始化数组:
array = {}
for i= -2, 2 do
array[i] = i *2
end
for i = -2,2 do
...
Lua数学函数库
Lua 数学函数库
在科学计算与工程计算领域,我们都需要用到大量的数学函数。在 Lua 的数学库提供了大量的数学函数,如下表所示:
S.N.
函数与功能
1
math.abs(x):返回 x 的绝对值。
2
math.acos(x):返回 x 的反余弦值(弧度)。
3
math.asin(x):返回 x 的反正弦值(弧度)。
4
math.atan(x):返回 x 的反正切值(弧度)。
5
math.atan2(y,x),返回 y/x 的反正切值,使用两个参数的符号查找象限( x 为 0 时也能正确的处理)。
6
math.ceil(x):返回大于或等于 x 的最小整数。
7
math.cos(x):返回 x 的余弦值(x 以弧度为单位)。
8
math.cosh(x):返回 x 的双曲余弦值。
9
math.deg(x):返回 x 的角度值(x为弧度)。
10
math.exp(x):返回 e 的 x 次幂。
...
Lua调试
Lua 调试
Lua 提供一个调试库,这个库中提供了创建自己的调试器所需的所有原语函数。虽然,Lua 没有内置调试器,但是开发者们为 Lua 开发了许多的开源调试器。
Lua 调试库包括的函数如下表所示。
S.N.
方法和描述
1
debug():进入交互式调试模式,在此模式下用户可以用其它函数查看变量的值。
2
getfenv(object):返回对象的环境。
3
gethook(optional thread):返回线程当前的钩子设置,总共三个值:当前钩子函数、当前的钩子掩码与当前的钩子计数。
4
getinfo(optional thread,function or stack leve,optional flag):返回保存函数信息的一个表。你可以直接指定函数,或者你也可以通过一个值指定函数,该值为函数在当前线程的函数调用栈的层次。其中,0 表示当前函数(getinfo 本身);层次 1 表示调用 getinfo 的函数,依次类推。如果数值大于活跃函数的总量,getinfo 则返回 nil。
...


