`
hzbook
  • 浏览: 259131 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

游戏开发世界的Lua语言

 
阅读更多

现实中的游戏开发常常面临两种互相矛盾的压力,一方面需要测试和验证新想法,另一方面又需要快速开发并且按时交付。把脚本语言集成到游戏项目中可以提升团队的开发效率,并且可以很好地扩展原生编译语言的能力。Lua在游戏开发的许多基础领域中都表现得很出色。

在游戏开发团队中,可能有许多成员都使用Lua来完成他们的工作。程序员负责将Lua整合到游戏开发环境中,通常,他们会需要编写一些Lua代码。游戏设计师是脚本语言的主要使用者,因为他们和上层的游戏设计和数据直接打交道。美术师也会经常使用Lua,进行诸如界面布局、设计和3D场景中各种模型的摆放之类的工作。

Lua是非常强大的工具,可以用来完成下面这些工作:

  • 编辑游戏的用户界面
  • 定义、存储和管理基础游戏数据
  • 管理实时游戏事件
  • 创建和维护开发者友好的游戏存储和载入系统
  • 编写游戏的人工智能系统
  • 创建功能原型,可以之后用高性能语言移植

1 游戏界面

游戏界面是玩家和你的游戏进行交互的媒介。游戏界面是一个游戏最基本的部分,因为它负责所有和玩家的交互工作。因为它的重要性,所以需要能够高品质、高性能地运行,并且能够被测试和持续改善,以最大化地提升用户体验。

Lua可以让界面设计师迅速创建所有主要的界面元素——进行界面布局、管理用户输入并且输出游戏数据。利用游戏程序员开发的一部分核心的界面控件和控制函数,界面设计师不仅能负责界面的美术观感还能控制游戏的交互。这不仅节省了程序员的时间,而且给了美术设计师更大的创作空间,同时还能为界面设计的测试节省出许多时间。代码清单3.2展示了使用Lua创建文本GUI控件的方法。

代码清单3.2 使用Lua创建文本GUI控件


2 管理游戏数据

管理游戏数据对于游戏开发者一直都是一种挑战。游戏数据定义了游戏世界中所有对象的参数和特性,如脉冲枪升级费用、气垫船的行驶速度等。对于数据密集型游戏来说,开发者常常利用电子表格工具来输入和保存数据,然后创建解析工具将其转换成游戏中可以使用的格式。这种方法一般用在数据密集型游戏中,如角色扮演类游戏(NPC或者非游戏玩家角色的信息以表格结构形式存储)或者策略类游戏(角色单位信息保存在数据表中)。

Lua可以让这个存储系统更为简单,它以Lua文件作为存储介质让程序使用相同的数据。通过创建一个简单的数据管理系统,变量和类型可以定义在Lua中,然后可以很容易地读取。因为不用关心整个数据处理过程,所以游戏设计师可以按照需要修改、增加和缩减游戏数据,而不需要程序员的协助。因为Lua语法的特性和在脚本中添加注释的能力,数据文件是易读的。如果需要转换工具,也非常容易开发,把Lua数据输出到Lua文件,然后在运行时载入。

Lua本身并没有可以直接访问外部数据库的能力,但可以用C++开发访问数据库的组件,然后再利用LuaGlue函数整合该组件来达到目的。

在代码清单3.3中,我们可以看到如何使用Lua示例文件来直接保存游戏数据。在这个例子中,通过使用LuaGlue函数,向由核心代码管理的数据结构中写入数据。代码清单3.3的输出可参照图3.1。

代码清单3.3 使用Lua保存美国总统选举模拟游戏(《Frontrunner》)的数据

图3.1 游戏《Frontrunner》的截图,Lua数据的实时显示

3 事件处理

通常,游戏中的绝大部分重要的处理都是由事件驱动的,要么是来自游戏角色,要么是来自游戏中那些交互的代理。这些事件可以是简单的,如用户按下了<W>键,也可以是复杂的,如两个游戏实体同时来到了某个地方。

事件驱动的编程,对于熟悉了Windows开发(事件是Windows GUI操作的基础)的用户来说不是什么陌生的技术。在C++精心开发的事件系统中,使用Lua来接收和处理这些事件,用户可以在游戏内部运行机制、高级Lua函数和用户输入之间创建清晰的反馈流程。一个简单的例子是,获取键盘输入然后向Lua事件处理器发送该事件,同时将该输入值显示出来。这个概念将一直贯穿于本书之中——事件会返回事件类型ID和驱动事件的物体ID,参照代码清单3.4。

代码清单3.4 获取按键事件的例子


4 保存和读取游戏状态

保存和读取玩家的数据是游戏开发项目中最具有挑战的事情之一。因为玩家有时需要暂时离开游戏,所以需要一种保存游戏进度的方法。玩家还需要在某种新的尝试和挑战前保存游戏状态,这样万一尝试失败了还可以恢复游戏进度。同样,在开发和测试过程中,开发者会经常需要读取特定的游戏状态来验证游戏功能或者确认bug是否已修复。

如果使用Lua保存用户的核心游戏数据,就可以用Lua作为保存和读取当前游戏状态的系统。在Lua中,游戏进度文件是简单的可执行的Lua代码的文本文件。程序员或者设计师可以通过进度文件来获取当前游戏的状态(也可以修改),读取游戏进度就和执行Lua脚本一样简单。利用Lua标准的输入/输出函数,编写一个函数来保存游戏数据到可执行的Lua脚本中是最直接的方法。这个系统的优点是可以让设计师在开发过程中,根据游戏数据的增长和删减来编辑并修改这个函数(不需要特别的读取函数)。在开发的最后阶段,还可以利用脚本编译函数来为游戏数据加密。

5 人工智能

人工智能(AI)在如今的游戏中非常关键——玩家需要精明的、有挑战性的对手,感觉就像真人一样。游戏开发者明白真实世界的AI不是说完全模仿人如何玩和反应,而是为玩家创造这种感觉。多年来,开发者一直在争论计算机对手“”(计算机对手可以比玩家访问更多的游戏数据)的优缺点。这种争论最好用在别的时间和地方。不过,几乎所有的开发者都同意,比起AI模拟,AI行为的玩家感知更为重要。

就开发AI判定来说,Lua是一种非常高效的工具。有许多人工智能组件,如路径寻找,最好留给底层语言来实现。路径寻找(计算机控制的物体在虚拟世界中的路径寻找)是一个数据运算量很大的工作,计算机需要反复测试可能的路径来寻找最短或者最直接的路径。(路径寻找最好整合到上层的LuaGlue函数中以便控制相关参数,但还是会在后面的章节中介绍一种Lua的实现。)另一个例子是用最大最小值方法实现的移动判定,一般被用在计算机象棋游戏中,预测之后几步的移动并尝试计算出最优的移动步骤。一般来说,“能思考的函数”都需要大量的数学计算,如导航树或者尝试错误法运算最好都留给底层代码。依赖有限的数据集合和参数的人工智能才更适合Lua的特点。Lua的优点是设计师可以编写简单的模型来试错,并快速验证和迭代想法而不需要麻烦程序员。想要利用Lua高效率实现AI,需要很仔细地设计函数(C函数),让Lua脚本可以访问和交互游戏数据。使用Lua作为事件管理系统同样可以让AI设计师能应对游戏开发中的变更,开发出灵活反应的AI系统。

在代码清单3.5中,用户可以看到使用Lua来评估可能的竞选旅行目的地,评估的依据是这个州的选举人票数量和这个州的支持率。

代码清单3.5 评估虚拟的美国总统候选人应该去哪个州的Lua人工智能函数


6 快速构建原型

商业化的游戏必须为玩家提供高性能的体验,掉帧和处理延迟的现象在如今竞争激烈的市场中是绝不允许的。程序概要分析(Profiling)是行之有效的确定性能瓶颈的方法,但必须在所有功能都开发完成并正确工作的前提下才能进行。原型开发和性能改善一般是不能同时进行的。

Lua是构建可移植的核心游戏功能原型的不错工具。因为Lua可以整合原生语言开发的组件,所以移植单独的Lua函数到C++,对于其他Lua函数来说是不需要变更的。它可以让设计师在构建原型时,如果碰到有高性能需求的函数就可以让程序员用底层语言来实现。因为程序的算法结构已经有了,所以C函数和LuaGlue调用都可以高性能、无缝地集成在项目中。

7 小结

在游戏开发领域,Lua和C++是一个功能十分强大的组合。对于GUI开发、事件管理、数据保存和获取、游戏进度保存和载入以及人工智能这些游戏开发工作,需要能够快速地构建原型、测试和迭代设计,而这些正是Lua所擅长的。在核心底层语言开发的项目中,频繁的变更会导致系统的不稳定,并让开发者不能专注于更重要的开发任务。使用Lua环境分担这些工作,可以让设计师和程序员快速而安全地使用脚本来设计、测试和实现游戏功能。

-----------------------------------------------

本文节选自《Lua游戏开发实践指南》,原书名:Game Development with Lua,作者:Paul Schuytema & Mark Manyen,译者:田剑。

本书是资深lua游戏开发工程师10余年工作经验和智慧的结晶,lua语言创始人亲自作序推荐,是lua游戏开发领域最具实战意义和代表性的著作之一。它不仅详细讲解了在游戏开发中使用lua的各种技术细节、方法技巧和最佳实践,而且讲解了如何使用lua作为主要工具将游戏设计转化为代码实现的过程。此外,它还重点阐述了lua语言的核心要素。最重要的是,本书包含大量精心设计的案例,并附赠了完整的源代码,可操作性极强。

豆瓣收藏:http://book.douban.com/subject/20392269/

PDF样章下载:http://vdisk.weibo.com/s/ix8ok

分享到:
评论

相关推荐

    《罗布乐思开发官方指南:Lua 语言编程》读书笔记模板x.pptx

    * 游戏开发工具:罗布乐思 Studio 是融合了 3D 引擎、社交、云存储的开发工具,也是优质的游戏化教育工具。 * Lua 语言编程:使用 Lua 语言编程可以创建游戏化教育工具,帮助读者学会使用属性、变量、函数、if-then ...

    love2D 游戏引擎 v0.10.2, Mac 版,采用 lua 语言开发游戏

    Love2D是一款开源的游戏开发框架,它以轻量级、高效和易用为特点,让开发者可以使用Lua语言快速创建2D游戏。Love2D的名字来源于"Love of Lua"的缩写,它将Lua的强大与游戏开发的灵活性相结合,使得没有深厚编程基础...

    Lua脚本语言中文教程.pdf

    Lua被广泛用于嵌入式系统、游戏开发、应用脚本编写等场景。例如,大型游戏《愤怒的小鸟》就是使用Lua语言进行开发的。Lua不需要复杂的库,它的轻量级设计使得它执行效率极高,对于需要高性能脚本处理的应用场景是一...

    两本lua电子书

    总之,通过阅读《Lua程序设计》和《Lua游戏开发实践指南》,你不仅能够精通Lua语言本身,还能掌握如何将这种强大的工具应用于实际游戏开发中,从而提升你的游戏开发技能和效率。无论你是初学者还是经验丰富的开发者...

    使用Python Lua和Ruby语言进行游戏编程

    在本主题中,我们将探讨三种语言——Python、Lua和Ruby在游戏开发中的应用。 首先,Python以其简洁易读的语法和丰富的库支持而闻名,使其成为初学者和专业人士的理想选择。在游戏编程中,Python可以用于创建游戏...

    [Lua语言]Lua语言入门

    Lua是一种轻量级的脚本语言,被广泛应用于游戏开发、嵌入式系统以及各种工具之中。它以其简洁的语法、高效性能和强大的扩展性著称。这篇博客将引导初学者踏入Lua的世界,了解其基本概念、语法结构以及常用编程技巧。...

    LUA语言编写经验

    LUA语言是一种轻量级的、可扩展的脚本语言,广泛应用于游戏开发、嵌入式系统等领域。本文将从 LUA 语言的特性、示例代码、Chunks 等方面对 LUA 语言进行深入的介绍。 LUA 语言的目标 LUA 语言的目标是成为一个很...

    LESetup, lua语言编译器

    在游戏开发领域,尤其是魔兽世界插件的编写中,Lua因其简洁、高效和易于学习的特性而备受青睐。LESetup是用于安装和配置Lua编译器的程序,它帮助用户在本地环境中搭建lua语言的开发环境,以便于编写和运行魔兽世界的...

    LUA语言中文使用说明pdf文档

    **LUA语言中文使用说明** LUA是一种轻量级的脚本语言,广泛应用于游戏开发、系统配置、嵌入式系统以及各种软件的扩展。它的设计目标是提供一种简洁、高效且易于学习的语言,使得非程序员也能进行编程。LUA语言的...

    lua游戏ai开发指南 源码

    《Lua游戏AI开发指南》是一本深入探讨使用Lua语言进行游戏人工智能系统开发的专业书籍。源码的提供使得读者能够更直观地理解书中的理论与实践相结合的部分,加深对游戏AI编程的理解。在游戏开发中,Lua因其轻量级、...

    Lua游戏开发实践指南

    综上所述,“Lua游戏开发实践指南”不仅是一份技术手册,更是进入游戏开发世界的钥匙。它不仅涵盖了Lua语言的基础知识,还深入探讨了如何利用Lua的特性和优势来优化游戏开发流程,提升游戏质量和性能。无论是新手...

    Lua 语言入门

    由于其简洁的语法和强大的功能,Lua 在游戏开发领域尤其受欢迎,许多知名游戏如《魔兽世界》等都采用了 Lua 作为其脚本语言。 #### 二、Lua 的基本语法 1. **注释**: - 单行注释:使用 `--` 开始,直到行尾结束。...

    lua游戏开发

    **第三章 游戏开发世界的Lua语言** 这一章深入探讨了Lua在游戏开发中的具体应用。讲解了如何使用Lua进行游戏逻辑控制,如角色行为、AI系统、游戏事件处理等。同时,介绍了Lua的元编程特性,如元表和元方法,这些高级...

    lua语言参考手册 pdf

    ### Lua语言参考手册知识点概述 #### 一、Lua语言简介 **Lua** 是一种轻量级的编程语言,设计初衷是为了方便嵌入到其他应用程序中作为脚本语言使用。其核心设计目标在于易于嵌入性,这也使得 Lua 成为了诸多游戏...

    Lua 编程语言 中文教程

    Lua是一种轻量级的脚本语言,以其简洁、高效和可扩展性在游戏开发领域备受推崇,尤其是在《魔兽世界》等大型游戏中的成功应用后,Lua的地位更是得到了巩固。这篇中文教程“Programming_In_Lua.pdf”是学习Lua编程的...

    2D DM游戏开发软件

    其主要特点是支持LUA语言,并提供直观的可视化编辑功能,使得游戏开发过程更为高效和便捷。 首先,LUA语言是这款软件的核心之一。LUA是一种轻量级的脚本语言,语法简洁,易于学习,广泛应用于游戏和嵌入式系统中。...

    cocos2d-lua版消消乐源码

    - **lua语言**:lua是一种轻量级的脚本语言,语法简洁,易于上手,被广泛用于游戏开发。在cocos2d-lua中,lua用于编写游戏逻辑,实现游戏规则。 - **cocos2d-x**:这是一个跨平台的游戏开发框架,支持2D图形渲染,...

    使用 cocos2d-x 和 Lua 快速开发游戏

    在游戏开发领域,使用游戏引擎进行快速开发已经成为了一个非常流行的趋势,特别是在移动游戏开发中。本文将介绍如何利用cocos2d-x这一流行的游戏引擎,结合Lua脚本语言,实现快速的游戏开发。 首先,我们需要了解...

    Lua脚本语言基本教程高清版

    Lua语言简洁、高效且功能强大,在游戏开发、Web应用开发、图形用户界面构建等多个领域都有广泛的应用。 - **历史发展**:Lua由巴西的PUC里约热内卢大学的程序员团队开发,首次发布于1993年。随着时间的发展,Lua不断...

    lua开发ios native app

    在iOS应用开发中,Lua是一种轻量级的脚本语言,常被用于增强应用程序的可扩展性和灵活性。本文将深入探讨如何使用Lua开发iOS原生应用,以及luaDemo中的相关知识点。 首先,我们要理解Lua的基本概念。Lua是一种简单...

Global site tag (gtag.js) - Google Analytics