Lua是什么

虽然计算机可以做很多事情,但它不会思考,它需要接受系统化的指令来工作。大部分用户通过应用程序为计算机指派任务,软件工程师则使用底层编程语言让计算机工作。而脚本语言,存在于操作便捷的应用程序和开发软件的底层编程语言这二者之间。

脚本语言

脚本语言可以方便地与计算机底层功能交互,这体现在它常被当做批处理命令工具,即发送一系列重复的指令给命令处理器。所以早期的脚本语言常被称为批处理语言或作业控制语言。

计算机语言用于解决一些特定的问题,从系统控制级别的C和C++到人工智能处理语言(如LISP)。脚本语言通常拥有一些共同点,它们一般用在快速开发中,并采用接近自然语言的语法,对于非程序员背景的人更易于书写和阅读,这样有一定基础的用户就可以在没有程序员的帮助下编写和使用脚本语言。脚本语言在调用其他底层语言开发的模块方面十分出色。

脚本语言都是载入时解释和编译,而非预编译,即调用时才处理。以Lua为例,它只有在载入时才被编译成二进制形式并存在于内存中,直到被释放。

在软件开发,特别是游戏开发领域。结合使用脚本语言和底层语言可以让开发者更好地控制运行环境,使得在开发过程中,在运行环境上的修改和测试都拥有更大的灵活性。

Lua

Lua在葡萄牙语中是月亮的意思,1993年由巴西的Pontifical Catholic University开发。该语言是由一个来自计算机图形技术组织(Tecgraf)的团队(Roberto Ierusalimschy、Waldemar Celes、Luiz Henrique de Figueiredo)开发,并作为自由软件发行。Lua开发小组的目标是开发一种小巧、高效且能够很好地和C语言一起工作的编程语言。在脚本语言领域,Lua是最快、最高效的脚本语言之一,因为它有资格作为游戏开发的备选方案。

Lua,A lightweight、portable、dynamic scripting language

Lua是一种轻量小巧的脚本语言,用标准CANSI C编写并以源代码形式开放。其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制的功能。

Lua 和传统的脚本语言不同,它是一种易整合语言(glue language)。一般的脚本语言用于控制执行重复的任务,而易整合语言可以让使用者把其他语言开发的功能整合在一起。这样就让脚本程序员有了更大的发挥空间,而不仅仅局限于执行命令。程序员可以使用这种脚本在底层语言开发的功能模块基础上储行间新的命令。

Lua本身是一种简单且强大的编程语言,可以让脚本程序员完成大量的处理。这种语言拥有很强大的字符处理和数学运算能力、灵活的数据结构,以及定义函数的功能。但是如果没有整合其他环境的组件的魔力,这些基础的特性也就丧失了。

Lua非常适合作为更强大的底层编程语言的搭档,如C++。Lua能让游戏开发者快速建立游戏原型甚至是完整的游戏。游戏开发者可以在没有程序员帮助下,构建整个图形界面。它还可以用来管理游戏进度文件的保存和载入,而且很容易阅读和调试。在游戏开发领域,Lua能帮助开发者构建一个高效且方便验证游戏想法的环境。

按Lua开发团队的描述,Lua是一个可集成在应用程序中的“语言引擎”。它本身是一种编程语言,提供很多可以和应用程序交换数据的API。另外,Lua还能够通过整合C++的模块来进行功能的扩展。和程序开发语言如C++配合使用时,Lua也可以用来作为特定项目的框架语言。这种易扩展性使得Lua非常适合作为游戏开发的环境。

作为独立的编程语言,Lua功能有限,只能用作教学工具。Lua只有集成在其他语言中才能发挥它的价值。它的实现非常简单。通过LuaClue函数就可以和底层语言通信,在用户自定义LuaGlue函数的基础上,还可以进一步被扩展,甚至成为一种新的编程语言。

Lua应用场景

  • 游戏开发
  • 独立应用脚本
  • Web应用脚本
  • 扩展和数据库插件
  • 安全系统

为什么要学习Lua语言,Lua语言能做什么呢?

能够自己编写游戏脚本,除了可以编写游戏辅助脚本之外,还有很强大的功能,特别是在游戏开发领域的脚本编写,有着广泛的应用。

小结

  • Lua是一个小巧的脚本语言,是巴西里约热内卢天主教大学里的一个研究小组开发完成的
  • Lua由标准C编写而成,几乎在所有操作系统和平台上都可以编译运行。
  • Lua脚本可以很容易的被C/C++代码调用,也可以反过来调用C/C++的函数,使得Lua在应用程序中可以被广泛应用。
  • Lua并没有提供强大的库,这是由它的定位决定的。所以Lua并不适合作为开发独立应用程序的语言。

Lua在游戏领域的应用

脚本的概念在程序中十分重要,在游戏开发领域,它更是决定性的。脚本语言让程序员可以区分游戏开发的“硬核部分”和“软核部分”。“硬核部分”一般对计算性能要求很高,在开发过程中变更较少、重用性很高。图形引擎和人工智能模块是其中的代表。这些模块最适合使用C或C++这样的语言开发,可以提供更好的性能。“软核部分”控制“硬核部分”来创建最后的图形和大量的物体。这个部分更适合使用Lua这样的脚本语言开发,可以为程序员在尝试、测试和改变游戏代码上提供更多的灵活性。

Lua作为脚本语言的诞生是因为两个特别的行业需求,它们都和游戏相关。应用程序需要灵活的数据描述语言和简单的行为描述脚本语言(例如,数据验证),这些就是Lua最初的目标:可移植性、小巧、无限制。它必须是可移植的,因为目标客户的计算机是多样化的。它还必须小巧,不能让程序因为使用它而变得庞大,因为一些目标机器空间是很有限的。同时,以往的经验告诉我们,编程语言不能限制程序员,因为在开发程序时,往往会出现我们意想不到的需求和用法。因此,在第一个版本开始,Lua就因为它自身的简单性而表现出优异的性能。后来,因为这种简单性被证明是十分有价值的,所以我们将它加到了Lua的目标中。

越来越复杂的开发过程

多年前,大部分游戏是开发者在车库和地下室、利用周末或业余时间开发的。现在若制作能够在当地电子市场售卖的游戏,则需要许多专业的开发者分工协作。

复杂度增长导致专业的分工。游戏美术设计人员负责制作2D或3D动画以及静态模型,程序员实现网络编程、人工智能和3D渲染。在这种专业的分工下,想要保持过去那种灵活并富有创造性的游戏开发过程越来越难。

开发团队规模不断增长,以及游戏复杂度的不断提高,使得不同游戏系统之间的依赖性也在提高。这些依赖性则直接导致了开发周期延长,游戏设计想法无法验证,创新和游戏灵感也不得不由于开发周期紧张而有所限制。

例如以往开发一款第三人称冒险射击类游戏,首先3D美术设计师用建模软件创建一个游戏场景,把这些模型导入一个内部工具中,让设计师设置和触发区域,当玩家角色或AI控制的敌人进入该区域时触发特定的游戏事件。然后,设计师会坐下来和程序员交流每个触发区域,告诉他们期待发生的结果,程序员做好各种笔记,接着许多天事件来实现代码。完成后设计师检验成果,并提出修改意见,然后整个过程不断迭代。

尽管结果是可靠的,可以想象的这个过程非常艰苦,不仅耗时而且呆板。

游戏服务器领域组织分工

  • 引擎层
    C\C++实现服务器引擎内核,其中包括最核心的功能,比如网络是收发、数据库查询、游戏主逻辑循环等。
  • 脚本层
    向引擎层注册一个Lua主逻辑脚本,当接收到用户数据时,将数据包放到Lua脚本中进行处理,主逻辑脚本主要是一个大的函数表,根据收到的协议包的类型,调用相关的函数进行处理。
  • API
    引擎层向脚本层提供很多API,方便调用引擎层的操作,比如脚本层处理完逻辑之后调用引擎接口应答数据等。

在这个架构中,引擎层实现了游戏服务的核心功能,这部分的变动相对而言不那么频繁,而游戏逻辑、玩法是变动很频繁的,这部分使用脚本来完成。

更好的开发方式

更好的方式是使用中层脚本语言来构建项目,它可以帮助游戏设计师把握整个开发交互过程,让程序员去做大量更基础的工作。

从游戏开发者的角度看,脚本语言可以帮助用户很容易地返回游戏开发过程,也许需要几个小时来构建一个“干净”的游戏项目,但游戏语言可以帮助用户快速做出修改并立即看到游戏的效果。游戏设计师可独立于程序员尝试新想法,游戏美术设计时刻创建图形界面把游戏流程和功能组合到一起。

脚本语言存在于由软件工程师编写并编译后的代码之上,通常是在运行时编译,是一种方便设计师或程序员处理和控制数据的简单语言。

为什么要使用脚本语言呢?对于资深的从业人员或业务开发者来说,这都是一个值得关注的问题。从游戏设计师的角度来说,使用脚本语言开发游戏可以很清楚地界定底层代码和游戏玩法代码。通常在引入脚本语言的项目中,底层模块交给C++这样的核心语言,诸如界面交互、数据管理、人工智能、事件处理等,一般使用脚本语言实现。这种职责的划分可以让用户的游戏更加稳定,并且使得并行开发成为可能。

脚本语言还能使开发团队中的非技术成员参与到核心开发过程中,界面美术师不仅只制作界面素材,还能独立于程序员编写界面运行在游戏中的脚本框架。要实现这些想法,设计师可以不必麻烦程序员,而直接着手AI数据处理或者创建场景脚本。

在游戏开发的世界中,Python和Lua是非常适合的,因为你它们可以直接调用C++的功能,它们都有很强的兼容性,可以与编译后且基于C++技术的模块协同工作,而且还能扩展。

为什么使用Lua

对于游戏开发而言,Lua是较好的选择,其设计的核心目标是可扩展性,因此你在最初设计时就考虑到要能够集成在大型应用中。因为有了这样的设计目标,所以非常容易在应用程序中加入Lua脚本。Lua的易集成的特性还使得Lua可以很方便地与父程序通信。游戏程序员都希望脚本语言能够简单地实现游戏设计,在这方面Lua也能胜任。

Lua免费、小巧、快速且易移植。Lua采用了非常灵活的发布协议,它有极少的源代码,运行轨迹十分紧凑,在编译时间和运行时内存占用上都有很好的性能表现。

要说Lua最让人惊喜的地方,应该是它的执行速度。对于任何脚本语言的技术方案,游戏开发者多的第一反应就是“脚本太慢了,帧率一定不会很理想”。这个说法对Lua不成立,事实上,还没有看到任何一个项目因为Lua的使用而造成瓶颈。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容