2.2Lua简介
Lua和传统的脚本语言不同,它是一种易整合语言(glue language)。一般的脚本语言用于控制执行重复的任务,而易整合语言可以让使用者把其他语言开发的功能整合在一起。这样就让脚本程序员有了更大的发挥空间,而不仅仅局限于执行命令。程序员可以使用这种脚本在底层语言开发的功能模块基础上创建新的命令。本书将探讨如何使用Lua来整合C++的与游戏相关的一些功能,如GUI、AI、数据等。
Lua本身是一种简单而又强大的编程语言,它可以让脚本程序员完成大量的处理。这种语言拥有很强大的字符处理和数学运算能力、灵活的数据类型(很快就可以熟悉),以及定义函数的功能。但是如果没有整合其他环境的组件的“魔力”,这些基础的特性也就丧失了。(没错,你可以在命令行下执行Lua脚本并查看运行结果,但除了学习语言本身,对于游戏开发来说,命令行式的输出是没有实际意义的。)学习其他编程语言经典的第一课是如何输出“hello world”,Lua版本的方法参见代码清单21。
代码清单2-1用Lua编写的“hello world”程序
Lua非常适合作为更强大的底层编程语言的搭档,如C++。Lua能让游戏开发者快速建立游戏原型甚至是完整的游戏。游戏开发者可以在没有程序员帮忙的情况下构建整个图形界面。它还可以用来管理游戏进度文件的保存和载入,而且很容易阅读和调试。在游戏开发领域,Lua能帮助开发者构建一个高效并且方便验证游戏想法的环境。
按照开发Lua的团队的描述,Lua是一个可以集成在应用程序中的“语言引擎”。它本身是一种编程语言,并且还提供了很多可以和应用程序交换数据的API(应用编程接口)。另外,Lua还能够通过整合C++的模块来进行功能的扩展(这个就是我们之前所说的“整合”功能)。和程序开发语言(如C++)配合使用时,Lua也可以用来作为特定项目的框架语言。这种易扩展性使Lua非常适合作为游戏开发的环境。
作为独立的编程语言(在运行窗口中执行),Lua功能很有限,只能用做教学工具。(我们会在接下来的章节中使用控制台学习该语言。)Lua只有集成在其他语言中才能发挥它的价值。它的实现非常简单,仅仅通过一些LuaGlue函数就可以和底层语言通信,在用户自定义LuaGlue函数的基础上,它还可以进一步被扩展,甚至成为一种新的编程语言。
2.2.1Lua的历史
Lua在葡萄牙语中是“月亮”的意思,1993年由巴西的Pontifical Catholic University开发。该语言是由一个来自计算机图形技术组织(Tecgraf)的团队(Roberto Ierusalimschy、Waldemar Celes和Luiz Henrique de Figueiredo)开发,并作为自由软件发行。Lua开发小组的目标是开发一种小巧、高效并且能够很好地和C语言一起工作的编程语言。在脚本语言领域,Lua是最快、最高效的脚本语言之一,因此它有资格作为游戏开发的备选方案。Lua的内核小于120KB(Python的内核大约860KB,Perl的内核大约11MB),当编译和集成到游戏开发系统中时非常小巧。Lua通常比Python这种流行的游戏开发脚本语言运行更快速,完整的性能测试报告可以在计算机编程语言实战性能测试网站中找到(http://shootoutaliothdebianorg/)。
计算机图形技术组织(Tecgraf)成立于1987年,致力于开发和维护用于技术和科技领域的计算机图形和用户界面。除了Lua,Tecgraf小组还开发了IUP(一种开发用户界面的系统)、CanvasDraw(跨平台的图形库)、TWF(一种用于Web页面的图形文件格式)和其他一些系统。读者可以访问相关网站获取更多信息。
2.2.2Lua授权
Lua是免费的开源软件,可以免费用于科研及商业应用。关于开源软件的更多信息可访问wwwopensourceorg。
对于游戏开发专业人员,授权费对于开发技术的选择影响很大。通常,对于一个项目,游戏引擎的预算会超过50万美元,中间件技术会花费5千美元~5万美元不等。因此,开源软件对于开发团队来说是很有吸引力的。
开源软件因为本身不盈利,所以它们的代码通常有很多bug,又由于没有太多注释,因此难以理解。另外,没人为技术支持付钱,所以也谈不上什么技术支持。
Lua则避免了这些问题,它小巧,实现简单(而且还在维护),代码简洁、清晰。Lua的开发团队是由具有计算机工程背景的专家组成,并且一直在关注着它的升级。和其他开源项目不同,设计Lua旨在项目中扩展功能,而不是在API级别,因此它的内核一直很稳定。
Lua授权的精神在于用户可以在任何情况下免费使用,并且不需要取得版权所有者的许可。如果用户想知道更多Lua授权的信息,那么可以访问www.lua.org/license.html。
完整的Lua 50授权如下(CDROM中也提供了该授权):