首页 > 范文大全 > 正文

游戏脚本语言的研究

开篇:润墨网以专业的文秘视角,为您筛选了一篇游戏脚本语言的研究范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:分析并总结了脚本语言的优势与缺点,分析了脚本语言在游戏开发中的应用,介绍了Python、Lua、等语言特点,总结了Python、Lua等语言在游戏开发方面的应用,指出了脚本语言在未来游戏开发中的趋势。

关键词:游戏开发;脚本语言

中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)15-20ppp-0c

The Research of Game Scripting Language

ZHOU Cheng,CHEN Dai-Jin

(Guangzhou Kangda Vocational Technical College,Guangzhou 511363,China)

Abstract:Analyzed and summarized the scripting language superiority and the shortcoming, has analyzed the application of scripting language in the game development, introduced the feature of Python、Lua and so on, summarized the application of Python、Lua and so on in the game development, had pointed out the tendency ofscript language in the game development.

Key words:The game development;Scriptinglanguage

1 前言

随着游戏项目规模的不断扩大,游戏内容越来越丰富,需要编辑的东西越来越多,对数据驱动的要求也就越来越高,传统的编译型语言C/C++已无法满足开发者对于语言灵活性,易用性,动态编译的需求[5]。游戏开发趋向于将脚本语言和C/C++等语言结合起来。作为底层的游戏引擎大部分使用汇编语言、C/C++等语言来开发,而游戏本身却用高级脚本语言来编写,例如Quake3和Unreal等。目前,国内大多数流行游戏如腾讯的《QQgame》和搜狐的《天龙八部》等也都使用了脚本语言。另外,无论是商业的Unreal引擎还是开源的OGRE还提供了脚本接口。在游戏开发领域,比较流行的脚本包括Python、Lua、ruby和Erlang等,其中Python和Lua是网络游戏开发的中坚力量。

2 脚本语言的优势

1)语法简单、易懂。脚本语言中抽象符号和古怪的语法和缩写词相对较少,编写和维护容易,其结果是测试、调试和修改也变得容易。

2)动态数据类型检查。变量不需要预先定义其类型,系统会在运行时自动检查变量的类型。对于变量采用“后期绑定”的方式,并不像C等语言在编译时就分配内存,而是在变量被引用时才被创建。

3)自动进行垃圾收集和内存分配。据CERT(the Computer Emergency Response Team)报告称,软件中80%的漏洞都是由缓冲区溢出产生的。脚本语言没有指针,在运行时自动处理垃圾收集和内存分配,这样可以就使得缓冲区溢出难以发生。

4)较少编程时间。如果一个软件使用脚本语言编写,那它花的时间要比Java缩短3倍,比C++缩短5倍[1]。这样可以节省编程人员的时间。

5)可移植性强。脚本语言与处理器、操作系统的平台无关,当脚本语言编写的程序移植到不同的平台时,只要改变它的解释器,其它任何事情都不需要做。

6)扩展性强。脚本语言都非常容易地与C、C++、Java整合。脚本语言提供了与外界联系的接口,其它语言的组件或库可以扩展脚本语言功能或被脚本语言“胶”到一起。

7)模块化,可重用性高。脚本语言支持模块化,代码可以被制作成容易使用的小组件。它也可以很轻松地重用到未来的项目中去。

8)其它。脚本语言都是交互式的解释型语言,脚本程序(大部分)都可以直接解释执行,所以在排除bug方面脚本也有先天的优势,这使得脚本能够更好地保证代码质量。

3 脚本语言的缺点

虽然脚本语言有许多优势,但它也存在许多不足。例如,虽然它能够节省编码的时间,但它的执行速度慢,所以它不适合开发像设备驱动程序和内核程序;源代码解释后的字节码容易受到攻击;虽然它的移植性比较好,但在一些特殊平台上不能被有效的使用;缺乏对底层资源的控制和管理;调试器也不够先进。

4 游戏开发中使用脚本语言

对于游戏内容的管理,游戏源代码管理,代码编译,运行时脚本的编写也都可以很方便的实现。在游戏的开发过程中,可以利用Python等脚本语言或者利用C/C++等语言独立开发游戏。目前,一般是将脚本语言和C/C++语言结合起来,完成游戏的开发。

4.1 驱动游戏数据

游戏公司发现在可执行代码中过多的关注游戏参数(例如:NPC的移动速度、角色的HP、MP值等)非常费时且使测试游戏变得更加难,因为任何游戏参数的变化都会导致重新编译或重建整个游戏――从头开始重建一个大的游戏将会要花费数小时,重新编译或重建意味着会引入新的问题。由于脚本语言在数据驱动和动态编译等方面的优势,使用脚本语言来管理和处理游戏的相关参数,即使是没有编程经验的设计师们也可以随意修改游戏的属性和测试游戏,在没有引入脚本语言之前,只有深入地了解游戏引擎才可以做到。

4.2 实现游戏引擎和游戏本身分离

由于脚本语言在GUI控制、人工智能、数据管理等方面的具有强大功能,所以,如果使用脚本语言来运行AI、处理游戏中玩家的属性等数据,那么编写游戏引擎的编码人员就可以专注于游戏引擎的代码上,从而实现游戏引擎和游戏本身进行严格分离。这样用C等语言编写的游戏引擎就可以用到多个游戏上。游戏引擎维护相对静态状态,而脚本语言处理游戏中的动态的数据,例如各个游戏中不同角色的属性、游戏目标和使命。这样有利于新游戏的开发和现有游戏版本的升级。

4.3 整合游戏中间件

在网游时代,市场竞争趋于激烈,如果延用单机时代的开发方式,那必然会被市场淘汰。在网游时代,游戏业中的主要矛盾已经由性能低下的硬件与游戏执行效率之间的矛盾转变为快速变化的市场需要与低效的开发工具之间的矛盾[2]。网游在网络、数据库、图形甚至部分逻辑等方面差异性不大。为适应这种竞争,游戏公司必然会采用大量的游戏中间件(目前比较流行的的网游中间件有Unreal等)来组合形成新网游产品。脚本语言又叫“胶”语言,它能够较好地粘合各个游戏中间件。这样,可以加快游戏的开发速度和质量。

5 游戏开发中常用脚本语言

5.1 Python语言

Python是一种面向对象的脚本语言。它在很早的时候就是一种游戏编程的辅助工具。在“星球之旅(Star Trek)”等超级大片中担当特技和动画制作的工业光魔公司(Industrial Light)就采用Python制作商业动画。最近,Python在“自由力量”和Humungous' 后院体育系列游戏中得到应用。Pygame 是一组为编写游戏而设计Python 模块,Pygame 是一组为编写游戏而设计Python 模块,Pygame在 SDL(Simple Directmedia Library即“简单媒体类库”)库的基础上添加了许多功能。它类似于 DirectX并支持图形硬件加速。还可以利用PyOpenGL模块,可以非常迅速的编写出游戏中的三维场景。Pygame具有非常好的可移植性,几乎可以运行在任何平台和操作系统上。因此,游戏开发人员可以利用python语言创建具有自己特色的游戏。Python通过扩展和嵌入等方式与其它语言相结合来增强它的开发能力。在Python语言中,只有极少数内置的将它与其它语言结合起来的方法。为了利用其它语言,开发人员需要开发一个包装程序,这个包装程序将Python中的功能参数转化到另一个语言中,同时将返回的结果以一种Python能理解方式传给Python。

Python语言的主要优点包括:

1)与Lua等相比,它有更多的扩展模块。

2)语法简单、易读在线学习资料、案例和相关书藉相对较多。

3)与它相关的工具相对较多。

Python语言的主要缺点包括:

1)它的调试器比较古怪且速度慢,它的执行速度慢。

2)很难将Python与其它语言捆绑。

3)很多开发人员不太喜欢它对空格符敏感这一语言特点

5.2 Lua语言

Lua是一个小巧简单、功能强大的语言,这使得Lua非常容易学习,它的完全版可用一张软件装下来。Lua有很高的执行效率,统计表明在众多脚本语言中,Lua是平均效率最高的脚本语言[3]。Lua被设计为易于扩展的,Lua很容易与C/C++、Java,以及其它语言接口,可用其它语言代码来扩展功能,实际上它的很多功能都是通过外部库来扩展的。鉴于它卓越的扩展性,可以把它作为搭建领域语言的工具(如:游戏脚本)。Lua不是通过使用条件编译来实现平台无关的,而是完全使用ANSI(ISO)C,这样只要是有ANSI C编译器的系统都可以使用Lua。Lua也存在一些不足,例如学习材料和文档非常少,自带的功能模块较少等。LuaSDL是Lua语言中的SDL封装包,它类似于Python中的Pygame。

Lua在复杂游戏用户界面控制、人工智能等方面的强大功能,使得它在游戏开发中得到重用。例如《魔兽世界》的自定义界面系统就采用了Lua,网易经典“西游系列”也使用了Lua。在游戏的开发过程中,开发人员一般将游戏引擎交由C/C++等语言完成。而在用户界面、人工智能、游戏逻辑、动态行为等游戏中经常变动的部分交予Lua来完成。

5.3 其它语言

Ruby是一种用于迅速和简便的面向对象编程的解释性脚本语言。RGSS (Ruby Game Scripting System)是它的一个脚本性质的游戏编程系统。RPG Maker XP (RMXP)这款制作角色扮演类游戏开发软件所使用的脚本语言就是Ruby。RGSS的功能有限,并不能用它完成一个完整的游戏,但随着游戏行业对网页游戏的看好和RoR(Ruby on Rails,即一个用于编写网络应用程序的框架,它基于计算机脚本语言Ruby)的流行,Ruby越来越受到重视。Erlang是用户相对很少,但它非常适合分布式的MMOG(Massively Multiplayer Online Game)的开发。

6 总结

随着市场对游戏的需求扩大以及网游生产组装化,以及开发者对于语言灵活性,易用性,动态编译的需求等,为脚本语言的发展提供了空间。但脚本语言不可能代替以C/C++为代表的其它语言。脚本语言和编译型语言在生产效率和执行效率上各有所长,游戏的开发既需要对游戏数据驱动、游戏内容管理等方面提供很好支持的脚本语言,也要有能满足游戏引擎快速执行特点的编译型语言。没有一种脚本语言适合所有类型的游戏开发,只能是根据所开发游戏的类型和特点来选择不同的脚本语言。

参考文献:

[1]Tom Gutschmidt.Game Programming with Python,Lua,and Ruby[M].US:Premier Press,2003.

[2]赖勇浩.游戏中的脚本语言[J].程序员:游戏创造,2007(8):16-17.

[3]Roberto Ierusalimschy.Programming in Lua[M],译.2003

[4]Hal Fulton.Ruby Way[M].US:Sams Publishing,2002.

[5]封烨.游戏中的Python语言介绍[J].程序员:游戏创造,2007(8):24-26.

收稿日期:2008-03-12

作者简介:周程(1979-),男,湖南衡山人,工程硕士,研究方向为软件工程、游戏动画设计;陈代进(1971-),男,湖北宜昌人,教育技术学硕士,研究方向为现代教育技术及虚拟现实技术。