lua游戏脚本自动打怪_游戏编程算法与技巧读书笔记第十一章·脚本语言和数据格式...

本文探讨了游戏开发中脚本语言的使用,如Lua和UnrealScript,以及脚本语言在游戏逻辑中的角色。文章指出,尽管脚本语言在性能上不如编译型语言,但它们提供了快速迭代和动态加载的优势。此外,文章还讨论了数据格式,如二进制、INI、XML和JSON,强调了它们各自的优缺点及其在游戏开发中的适用场景。
摘要由CSDN通过智能技术生成

一、脚本语言

多年前,游戏全部使用汇编语言开发。这是因为早期的机器需要汇编级别的优化才能运行。但是随着计算能力的提升,而游戏又变得很复杂,使用汇编开发就变得越来越没意义了。直到某一天,使用汇编语言开发游戏带来的优点被完全抵消了,这就是为什么现在的所有游戏引擎都使用像C++那样的高级语言开发。

同样,随着计算机性能的提升,越来越多的游戏逻辑开始从C++或者类似的语言转移。现在许多游戏逻辑使用脚本语言开发,常用的脚本语言有Lua、Python、UnrealScript等。

1.折中

脚本语言并不是万灵药,在使用之前必须考虑很多折中。第一个要考虑的就是脚本语言的性能远不如编译型语言,比如C++。即使比起JIT或者基于VM的语言,比如Java、C#,那些脚本语言,比如Lua、Python,在性能上都不具备可比性。这是因为解释型 语言按需加载文本,而不是提前编译好。多数脚本语言都提供了编译为中间格式的选项。虽然始终达不到编译型语言的速度,但还是会比解释型语言要快。

由于这个性能差异的存在,性能敏感的代码不应该使用脚本语言开发。以AI系统为例,寻路算法(比如A*)应该是高效的,因此不应该用脚本开发。但是由状态机驱动的AI行为应该完全用脚本开发,因为那不需要复杂的计算。

使用脚本语言的巨大优势就是使得开发时迭代更加快速。假设某个游戏的AI状态机必须以C++开发。在玩游戏的过程中,AI程序员发现某个敌人的行为不正确。如果状态机使用C++开发,这意味着通常程序员必须暂停游戏,修改代码,重新生成可执行文件,重新开始游戏,最后才能看到问题是否解决。

但是同样的场景如果出现在AI状态机是用脚本语言开发的时候,就可以动态重新加载脚本,然后在游戏仍在运行的时候就把问题解决的。运动中动态加载脚本的能力可以很大程度地提升生产力。

另外,如果使用C++开发,假设有访问野指针引起的bug,那么通常都会引发崩溃。但是如果状态机是使用脚本语言开发的,那可能只会让某个特定AI的角色行动不正常,而游戏的其他部分都是正常的。第二种情况要比第一种友好得多。

进一步来讲,由于脚本与可执行文件是分开的文件,使得提交工作更加简单。在大型项目中,生成可执行文件需要好几分钟,而且最终文件可能会有100MB。这意味着如果有新版本,需要的人要下载整个文件。但是,如果使用了脚本语言,用户只要下载几KB的文件就可以了,这样会快得多。这不仅对发售后更新补丁非常有帮助,在开发中也同样有用。

由于生产力的优势,一个最好的经验法则就是,只要系统不是性能敏感的,都能从脚本语言中受益。

2.脚本语言的类型

那么该使用哪个脚本语言呢?有两方面需要考虑:使用现有的,比如Lua、Python,还是使用自己开发的。一些自己开发的脚本语言有UnrealScript和QuakeC。

使用现有脚本语言的优势就是可减少很多工作量,因为编写脚本语言解释器非常花时间而且容易出错。

另一个要考虑的脚本语言开发的事情就是需要设计者深入了解编译器和虚拟机知识——比大多数游戏开发的话题还要多得多。

但是现有的脚本语言的缺点就是不能与游戏结合得非常好。既有语言设计上的内存和性能问题上的顾虑,也有桥接脚本语言和引擎之间的问题。而自定义的脚本语言是为游戏大量优化过的——这些语言的功能是面向游戏的,比如UnrealScript。

Lua

Lua是一门通用脚本语言,大概是现在游戏领域最流行的脚本语言。使用Lua的游戏的例子包括:《魔兽世界》、《英雄连》、《冥界狂想曲》等。Lua这么流行的一个原因是它的解释器非常轻量——纯C实现大概占用内存150KB。另外一个原因就是它非常容易做绑定,也就是在Lua中调用C/C++代码的能力。它同时支持多任务,所以它可以让许多Lua函数同时运行。

UnrealScript

UnrealScript是Epic为Unreal引擎专门设计的严格的面向对象语言。不像很多脚本语言,UnrealScript是编译型的。由于是编译型的,它有着比脚本语言更好的性能,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值