游戏开发中常用哪种脚本语言?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了游戏开发中常用哪种脚本语言?相关的知识,希望对你有一定的参考价值。
主要就是想实现
把某些功能放在外部(比如技能效果 物品效果之类),随时可以更改,到程序运行的时候自动读取脚本处理。哪种脚本语言比较方便?
多谢!
其实早在Lua脚本语言被大众所熟知以前,游戏业内人士就已经开始使用脚本来开发游戏了。我们熟悉的很多国内的网络游戏大都运用了脚本开发,比如网游的长青树“梦幻西游和《大话西游2就大量应用了脚本技术。特别是《大话西游2》,其实现基于Lua脚本游戏开发的时间要远早于《魔兽世界》。在脚本技术上,国内与国外其实是站在同一起跑线上的,并不存在什么差距,这也为国内游戏产业赶超国外游戏产业提供了强有力的技术保证。
在单机游戏时代,脚本这个词几乎很少出现,那么,为什么在网络游戏时代它却成了业界的宠儿呢?原因是多方面的。
单机游戏时代,无论游戏主机还是PC机,它们的性能都非常低下,从而需要具有较高执行效率的编译型语言对机器的性能进行“压榨”。随着科技发展和硬件性能的不断提升,脚本逐渐被开发者所接受并利用,但这并不是脚本流行起来的决定性因素,真正的原因还在于游戏市场有这方面的需求。
网络游戏时代的市场竞争激烈、变化莫测,如果延用单机时代一年半载才出一个新版本的开发方式,必然会被游戏行业激烈的市场竞争所淘汰。正是这种游戏市场需求旺盛和开发工具效率底下之间的矛盾,促使脚本语言迅速地发展起来。脚本的兴起使得传统编译型语言(asngC/C )的性能优势在硬件功效大幅攀升的今天已经不复存在。
除了市场和硬件这两个因素之外,还有一点我们不能忽略。那就是用C/C 进行游戏开发的高成本和高项目风险。随着java/.net逐渐流行,学习C/C 编程语言的人越来越少,而网络游戏市场的需求却越来越庞大,在程序人才大量匮乏的情况下,造成了c,C 人才的高成本。即便是有能力雇佣大量C/C 程序员的公司,在开发游戏的过程中,也不能无视C/C 的高级特性和高度灵活性带来的高项目风险。C/C 是易学难精的编程语言,在开发大型项目的时候由于程序员的水平参差不齐,所以极易造成沟通不畅。不仅如此,c,C 滥用的高级特性也容易引入大量bug。正是由于这些原因,游戏公司开始在游戏中使用脚本,希望通过脚本来解决这些高成本、高风险的问题。
二.脚本的现状
脚本不仅解决了c/C 无法解决的开发效率难题,还降低了开发的成本和风险。因此脚本技术在游戏业内蓬勃发展起来,并且已经成为游戏业中不可或缺的一环。纵观当前脚本技术现状,形势一片大好,不仅语言百家争鸣,而且书籍种类也越来越多;不仅在游戏业界开花结果,在web等其它应用领域也大放异彩。
首先,我们来看看目前比较流行的脚本:Python、Lua、ruby和Erlang。Python和Lua是网络游戏开发的中坚力量;ruby凭借 rubyonrails的web开发框架的强劲力量,其在游戏业的发展前途亦不可小视;Erlang在高并发性上的原生优势吸引了无数追求高性能网游服务器的开发人员的目光。
其次,我们来看看书籍方面。大家都知道,文字对语言的普及起到了催化剂的作用,甚至可以看作是语言的有机组成部分。Python经过基金会的多年经营而得到NASA、Google重用的原因,就是由于其相关书籍种类比较丰富;Ruby随着RoR的流行,这两年行情看好,书籍也出版得越来越多了;Erlang是典型的少众语言,但随着多核时代的来临和高并发网络应用的需求,Erlang有着光明的发展前景,现在<<ProgrammingErlang>>等书也已经在策划出版了;反观Lua,虽然目前越来越流行,但由于它晦涩的接口设计和缺乏大型应用的支持,使得相关书籍寥寥无几。
最后,我们把焦点重新聚集到游戏开发行业中,其实不难发现,除了前文提到的《魔兽世界》和网易经典“西游系列”使用了脚本外,现在大多数比较流行的程序也都使用了脚本,如腾讯的QQgame))和搜狐的《天龙八部》等。不仅如此,现今的游戏引擎也都提供了脚本接口,无论是商业的unreal引擎还是开源的 OGRE,无一例外。
三.脚本的优势
脚本之所以能够在游戏业中找到自己的一席之地,是因为网络游戏市场需要一个快速开发方案来避免C/C 开发带来的项目高成本和高风险。那么,脚本相对于C/C 这类编译型语言到底有什么优势呢?
I易于学习,代码可维护性强
脚本的语法通常都非常简单,也没有太多高阶的特性,学习的门槛较C/C 低得多,比如Python可能只需要花一个下午即可学会。这使得游戏开发公司可以招聘完全没有脚本、编程经验的新手,通过低成本的培训,他们便能迅速地走上工作岗位。除易于学习外,脚本代码也有较强的可维护陛(尽管写出没有人看得懂的Lua代码也非难事)。因为脚本没有很多高阶特性(如c 里的模板元编程就是高阶特性),所以脚本程序员就有更多的精力去架构、模式、重用和测试等工作,从而提高了代码的可维护性。相应地,正因为没有那么多让人困惑的高阶特性,也使得脚本代码“简洁”不少。
2.降低开发成本
如上所言,由于脚本易于学习,游戏开发公司可以大量起用新手,这正是降低成本的有效手段。那么如何来确保新手所写代码的质量呢?众所周知,新手无论用什么语言写程序肯定会出现bug,但用C/C 和Python做比较,可以看出,一个新手用C/c 编写出的程序所出现的bug肯定会比用Python编写出现的bug要多。由于c程序需要编译,而脚本程序(大部分)都可以直接解释执行,所以在排除 bug方面脚本也占有一定的优势,这也使脚本在降低成本的同时能够更好地保证代码质量。
3.形成人才壁垒
软件开发行业是一个颇为动荡的行业,无数的程序员都在跳槽和谋划跳槽的状态中生活,使用脚本开发形成人才壁垒是游戏业减少人才流动的有效手段。因为现在脚本除了在游戏业中非常流行外,并没有在其它行业形成广泛应用(虽然在web开发方面也有燎原之势,但终究不如在游戏业中的地位高)。这就使得游戏程序员很少会考虑非游戏行业的职位,但其它行业的程序员却可能会因为脚本的易学习性而转投游戏业。脚本除了能有效形成行业间的人才壁垒外,也能有效地形成企业间的人才壁垒。由于现有的脚本种类繁多,不同公司往往有不同的选择,甚至有些公司使用自己开发的脚本语言,所以程序员从公司A跳槽到公司B可能要学习使用另一种脚本,这就提高了跳槽的成本,从而减少了人才的流动。
四.脚本的发展趋势
依照目前趋势来看,脚本语言一定会更加的普及,而且会逐渐渗透到其它行业中。随着网络游戏从业人员数量的增长,脚本程序员也一直增加,而且Web2、0热潮引起的网络需求,也促成了一批批新脚本程序员的诞生。网络游戏市场就像一个正在滚动的雪球,推动着脚本的普及。
随着脚本在游戏业中越来越流行,市场对生产效率的需要也会相应提高。脚本虽然在一定程度上缓解了生产效率与生产工具之间的矛盾,但仍然不够完善。由于市场竞争日趋激烈,而网络游戏在很多功能上的实现又都相差无几,如网络、数据库、图形甚至部分逻辑,这必然会引起网络游戏生产的组装化一一大量中间件相互组合形成新的网络游戏。从目前来看,Bigwofld、PhysX和Unreal等都是比较流行的网络游戏中间件。脚本语言则是粘合各个中间件的良好胶水语言,所以随着网络游戏的生产组装化,脚本将有更大的发展空间。
那么,当脚本发展到如日中天的时候,可能取代C/C 这些编译型语言吗?笔者认为不会。脚本语言和编译型语言在生产效率和执行效率上各擅胜场,网络游戏既需要能快速应变的脚本,也需要能快速执行以提供更绚丽游戏效果的编译型语言。未来,它们之间一定会保持长久的和谐互补关系,相辅相成。
五.结语
综上所述,网络游戏时代是上帝赐予脚本语言发展的绝好时机,脚本语言很快将迎来光芒四射的时代。脚本语言拥有编译型语言无可比拟的生产效率优势,所以它们将互补互助并肩奋战在游戏的最前线。 参考技术A 一般大型的商业游戏引擎有自己的脚本语言,比如Unreal3就有自己的一套Unreal Script ,Unity3d可以用C#、javascript~~
也有用Python的,不过游戏里面最知名,用的最多的还是Lua。
魔兽世界的脚本语言就是Lua。
有些公司自主开发的引擎是不公开的,我们也不知道用什么,很可能是有自己的一套脚本语言系统,有本书《Game script mastery》就是讲解游戏里面脚本引擎搭建的,如果有兴趣,加上一点汇编语言和编译原理的基础,可以跟着这本书上的看看。推荐还是用Lua(前面那本书也提到Lua了),这个东西现在比较流行,资料齐全,有问题也方便交流。本回答被提问者采纳 参考技术B 游戏开发?那必然是Lua~效率高~但是手机游戏上有用其他语言的~Lua比较多而已~
有个别公司用Java当脚本~ 参考技术C lua还是经常用的 参考技术D 一般用php语言开发,如果你说那个好用或者方便的话,就是VB了,简单易懂追问
你在开玩笑
在现有代码库中支持哪种脚本语言?
【中文标题】在现有代码库中支持哪种脚本语言?【英文标题】:Which scripting language to support in an existing codebase? 【发布时间】:2010-09-06 03:11:28 【问题描述】:我正在考虑向现有代码库添加脚本功能,并正在权衡各种软件包的优缺点。 Lua 可能是最明显的选择,但我想知道人们是否根据他们的经验有任何其他建议。
脚本将在某些事件时触发,并且可能会驻留一段时间。例如,在启动时,一个脚本可以定义几个选项,程序将这些选项作为多个按钮呈现给用户。选择其中一个按钮后,程序将通知脚本可能会发生更多事件。
这些是唯一真正的要求;
-
必须是可从源代码编译的跨平台库
脚本必须能够调用已注册的代码端函数
代码必须能够调用脚本端函数
在 C/C++ 代码库中使用。
【问题讨论】:
【参考方案1】:根据我自己的经验:
蟒蛇。恕我直言,这是一个不错的选择。我们有一个相当大的代码库,有很多用户,他们非常喜欢它。 红宝石。有一些非常不错的应用程序,例如使用它的 Google Sketchup。我写了一个 Sketchup 插件,觉得很不错。 Tcl。这是首选的老式可嵌入脚本语言,但如今它的势头并不大。不过它的质量很高,他们在哈勃太空望远镜上使用它! 卢阿。我只用它做过婴儿用品,但 IIRC 它只有一个浮点数字类型,所以请确保这对您将使用的数据没有问题。我们很幸运生活在脚本的黄金时代,因此如果您从任何流行的脚本中进行选择,都很难做出错误的选择。
【讨论】:
【参考方案2】:我玩过Spidermonkey。在您的情况下,它似乎至少值得一看。我也听说过关于 Lua 的好消息。使用 javascript 脚本语言的一大理由是,许多开发人员已经知道它并且可能从一开始就更舒服,而 Lua 很可能有一点学习曲线。
我并不完全肯定,但我认为蜘蛛猴是你的 4 个要求。
【讨论】:
【参考方案3】:我为此目的广泛使用了 Python,并且从未后悔过。
【讨论】:
【参考方案4】:Lua 拥有最直接的 C API,用于绑定到我用过的代码库。事实上,我通常会快速手动为其滚动绑定。然而,如果没有像 swig 这样的生成器,您通常不会考虑这样做。此外,它通常比其他语言更快、更轻巧,而且coroutines 是其他语言很少提供的非常有用的功能。
【讨论】:
【参考方案5】:AngelScript
让您无需代理函数即可调用标准 C 函数和 C++ 方法。应用程序只需注册脚本应该能够使用的函数、对象和方法,而无需对您的代码进行任何操作。应用程序内部使用的相同功能也可以被脚本引擎使用,这样就无需复制功能。
对于脚本编写者而言,脚本语言遵循广为人知的 C/C++ 语法(稍作改动),但无需担心指针和内存泄漏。
【讨论】:
【参考方案6】:原始问题将 Tcl 描述为“T”。
Tcl 从一开始就被设计为一种嵌入式脚本语言。它本身已经发展成为一流的动态语言,但仍作为嵌入式语言在世界范围内使用。它在 BSD 许可下可用,因此它几乎是免费的。它还可以在几乎任何现代平台上编译,而且很多不是那么现代。它不仅适用于桌面系统,还有适用于移动平台的变体。
Tcl 擅长作为一种“胶水”语言,您可以在其中使用 C 编写性能密集型函数,同时仍受益于脚本语言在应用程序中对性能不太重要的部分的优势。
Tcl 还带有一流的 GUI 工具包 (Tk),可以说是最简单的跨平台 GUI 工具包之一。它还可以很好地与 SQLite 和其他数据库进行交互,并且已经内置了对 unicode 的支持很长一段时间了。
如果您的客户可以使用脚本接口(而不是简单地让您自己的工程师在脚本级别工作),那么 Tcl 非常容易学习,因为总共只有 12 条规则来管理整个语言(从 tcl 8.6 开始)。事实上,Tcl 作为一种发明领域特定语言的方式而大放异彩,这通常是它用作最终用户脚本解决方案的方式。
【讨论】:
【参考方案7】:已经有一些很好的建议,但我只想提一下 Perl 也可以调用/可以调用 C/C++。
【讨论】:
【参考方案8】:您可能可以使用任何现代脚本/字节码语言。
如果您愿意忍受新产品的成长烦恼,您可以使用Parrot VM。它支持此页面上列出的许多(如果不是全部)语言。不幸的是,它还没有完成,但这并没有阻止一些人在生产环境中使用它。
【讨论】:
【参考方案9】:我认为大多数人可能会提到他们最熟悉的脚本语言。从我的角度来看,Tcl 是专门为与 C 接口而设计的,因此您的问题域是为该语言量身定制的。但是,我确信 Python、Perl 或 Lua 都可以。您可能应该选择当前团队最熟悉的语言,因为这会减少学习时间。
【讨论】:
以上是关于游戏开发中常用哪种脚本语言?的主要内容,如果未能解决你的问题,请参考以下文章