在游戏中形形色色的剧情,任务的触发可以在游戏循环中使用硬编码来触发,这样做的弊端是所有的剧情任务等元素就算策划完成了文档最后还是要由程序员来输
入。在以前的项目中这些剧情和任务被写在了数据库中,在相应的表中,当游戏循环中检测到你与NPC对话或者有相似的触发行为则会交付相应的检查处理函数去
处理,这个处理函数先会检查是否有相关触发事件,如果有,则根据相应的事件类型去做相应的处理,比如剧情对话是一种类型,任务是一种类型,这个处理的函数
我们姑且叫它解析器。
每个复杂点的RPG游戏都应该有自己的脚本,刚才提到的那种把相关事件写在数据库的做法可以说是把所有具体的事件条目记录在数据表中,解析器根据条目类型
来才处理相应的事件,最近粗略的看了一下当下流行LUA语言,其语法等等都是作者定义的标准,好比微软提供给我们的API,不同的是API是应用接口,直
接使用,而LUA等定义的函数要经过作者的脚本系统的解析器来使其工作,我们游戏中使用LUA等脚本系统是因为他的广泛使用和节约成本的考虑(自己写一个
强大的解析系统也是可以的),但是在游戏中的很多功能我们想使用脚本来帮助完成该如何做呢?这里我并没有深入接触过,只能说说自己的设想,在游戏循环中碰
到需要检测脚本的地方我们可以调用LUA来读取相应的脚本文件,我们读进来了这些脚本文件中可能有我们自定义的脚本函数,比如我们在脚本中写了
SetPos(int x,int
y)这样的函数来表示设置角色位置,那么LUA中肯定是没有SetPos这样的函数的,LUA的解析器也解析不了,我想这样的函数的解析工作可能还是要放
在代码中实现,又或许再次利用LUA调用用来解析此类函数的脚本文件,这样脚本读取一条,解析一条,然后交给引擎来交互。
那么利用LUA这类脚本语言的最大好处就是将一些逻辑实现交由LUA来解析完成后和游戏引擎交互,做一个由脚本驱动的游戏则可以在保留底层的情况下开放给
更多的开发者用以扩充,听闻BIGWORLD和UNREAL等引擎都是基于脚本系统的,底层的代码应该是不会轻易的暴露,如此能保证节约开发成本和高效。
以上是我目前对脚本的一些理解,最近开了下Programming in
LUA,那些语法的东西看看也挺没意思,无非是人家约定俗成的东西,最后还是要交给LUA的去解析成为可以运行的代码,如果工期充裕为什么不自己做一个脚
本系统呢?目前对这方面还是存在困惑,以前的经验就是借助前面所提的数据表来实现一些游戏交互,在LUA等流行脚本方面并没有很深的研究,还望各位前辈能
够指点迷津,也许自己对LUA的交互模式理解并不到位,欢迎各位拍砖!