从0开始:开发自己的游戏

2017-05-19
在「从0开始:开发自己的游戏」中,我会介绍流行且简单的RPG游戏制作工具:RPG maker VX ace,手把手教你开发一款属于自己的游戏。你可能是开发者,是深度玩家,是对游戏感兴趣的人,无论你有没有编程基础,你都可以在这一系列文章结束时,打造出一款属于你的游戏。


RPG Maker VA


可能有很多人事前接触过RPG maker系列游戏引擎,这个游戏引擎专为实现类似于《最终幻想6》、《口袋妖怪》等2D平面RPG游戏诞生。但你最不应该做的就是小看这款游戏引擎。我将从用户界面开始,讲到深层次的代码剖析,带你开发一个自己的游戏。

为了方便不同层次的读者选择自己着重阅读的章节,我将在此列出这一系列文章连载的目录。同时,希望喜欢这一些列文章、对游戏制作感兴趣的朋友关注我,避免错过更新动态。

准备工作 - 开发环境和用户界面

下载和安装好RPG maker VX ace(以下简称RMVA)后,打开软件。首先系统会提示你新建一个项目。


新建项目界面


在「文件夹」输入框里输入游戏项目文件夹的名称,在「游戏标题」中输入你想为游戏起的名字(日后可以更改),在「项目位置」中确定你要将项目储存在计算机的什么位置。

这些设置完毕后,单击确定,完成一个新项目的建立。在项目建立完成后,你会看到如下界面。


新项目界面


这个界面就是游戏制作工具的主界面,在窗体上方的菜单栏中包含了RMVA的所有功能,我们将在以后详细讲解。

窗体左侧由上下两个部分组成。上部称为「图块区」,下部称为「地图树」。「图块区」中是绘制地图所用到的地图图块组(Tileset),「地图树」中列出来了目前游戏中所有的游戏地图。现在,新创建的游戏项目默认生成了一张蓝色大海的地图,地图名称为MAP001.

窗体右侧是「地图绘制区」。在这个区域中你需要完成地图的绘制和游戏主要的流程制作。

接下来,我们介绍几个会在以后制作游戏时常用的功能。


RMVA的菜单栏


游戏测试。在「菜单栏」最后的绿色三角符号就是测试符号。测试模式允许开发者游玩自己的游戏。同样,你可以点击「测试(G)」菜单下的「运行」进行游戏测试,或者之间按下键盘上的F12。

缩放游戏地图。在绘制大地图(比如繁华的城市中心和荒原森林)的时候,你尝尝需要缩小地图绘制整体,再放大地图绘制某些区域的细节。这个时候你需要对游戏地图进行缩放。在「比例(S)」菜单下可以进行地图按比例缩放的操作。同样,你也可以在「菜单栏」后部的1/1、1/2、1/4、1/8的按钮进行比例缩放。


缩放至1/8的初始游戏地图


切换编辑模式。在RMVA中,进行游戏流程的制作和绘制游戏地图都在「地图绘制区」完成,所以我们需要切换用于制作游戏流程的事件模式和用于绘制地图的地图模式。在菜单栏的中前部,你可以找到切换两者的按钮。


地图编辑模式和事件编辑模式


切换地图绘制工具。在使用电脑上的画图软件时,很多时候我们需要将一定区域填充为某个颜色,或者使用矩形和椭圆工具绘制一个几何图形。在地图绘制的时候,你也可以使用类似于这些绘图工具的功能。


RMVA地图绘制中的绘画工具


要注意的是,你必须在“地图模式”下才能使用绘图工具绘制地图。如果你处在事件模式下,绘图工具为无法点击的状态。关于如何切换为地图模式,请参阅前文中的「切换编辑模式」。

角色初始位置。地图中的这个人物方块就是角色初始位置。


角色初始位置


角色初始位置即为游戏开始时玩家所控制的主角所处的位置。这个位置可以在“事件模式”下通过拖动这个任务方块改变角色的初始位置,也可以鼠标右键单击某个方块,选择「设置初始位置」->「玩家」即可。


改变角色初始位置


要注意的是,你必须在“事件模式”下才能改变玩家初始位置。如果你处在地图模式下,「地图绘制区」无法被点选。关于如何切换为事件模式,请参阅前文中的「切换编辑模式」。

掌握了这些基本知识后,我们尝试在初始地图添加一块岛屿。默认的初始地图是100x100的一片汪洋大海,我们切换编辑模式到「地图模式」,用鼠标选中左侧窗体「图块区」中的陆地样式,在汪洋大海中画一片小岛。


在大海中间画一片小岛


然后按下F12键进入测试模式。系统会在你保存后弹出游戏窗口,默认的游戏界面和BGM:


默认的游戏开始界面


你可能会觉得字体、BGM、画面……整个游戏初始界面都非常难看。不用担心,我们日后会对这些进行优化。

使用RMVA制作的游戏操作方法是:使用光标键(方向键)控制角色移动和调整选项,使用Z键或者Space键确定,使用X键或者ESC键取消或者呼出菜单。如果你的操作正常,你会在进入游戏后看到在荒岛上的主角。

到现在你可能觉得你的心情和你刚刚点开这篇文章时截然不同。好丑好简陋的呼声充满你的内心。还是那句话,不要小看RMVA,我们会对这些进行美化处理。当我们一起学到后面的时候,你会惊讶于这个简单的游戏引擎具备的强大功能和表现效果。现在,不妨进行一下测试,体验一下游戏中的各种功能吧。


简陋的游戏画面



可以按下取消键X或ESC呼出菜单,菜单也很简陋


下一篇文章教程,我会带领大家进行简单的地图绘制,带各位进入造物主神奇的世界中。如果您喜欢这一系列教程,或者对游戏制作产生了兴趣,请您关注我避免错过更新的教程。有任何疑问或者批评,烦请私信联系。

创造世界 - 简单的地图绘制

在上一章的教程中,我带领大家第一次认识了RPG Maker VX Ace(简称RMVA)这一款“麻雀虽小五脏俱全”的轻量级平面游戏开发工具,并且认识了用户界面和常用功能。在本期教程中,我会带大家学习地图的绘制和相关操作,包括新建地图、删除地图、调整地图参数、绘制室内、室外地图,自动生成地下城迷宫等等。

RPG Maker系列工具介绍

可能有很多人事前接触过RPG maker系列游戏引擎,这个游戏引擎专为实现类似于《最终幻想6》、《口袋妖怪》等2D平面RPG游戏诞生。但你最不应该做的就是小看这款游戏引擎。我将从用户界面开始,讲到深层次的代码剖析,带你开发一个自己的游戏。

在RMVA之前,Enterbrain公司还推出了RM 2000,RM 2003,RMXP, RMVX和最新的RMMV。从RMXP开始,RM系列开发工具基于Ruby编程语言开发了名为RGSS(Ruby Game Script System)的内置脚本语言,玩家可以对默认的游戏系统进行加强和二次开发。

最新的RMMV系列,开始放弃RGSS,转而使用每个程序猿都会的Javascript作为脚本语言,更方便实现了跨平台。

本系列教程我将使用RMVA进行讲解,希望大家自行获取购买本工具,我不会给出破解版工具的下载地址。

1、创造世界 - 简单的地图绘制

我们现在先简要回顾一下上一期的部分内容。如果大家确定还记得什么是「图块区」「地图绘制区」和如何切换「地图模式」和「事件模式」的话,请继续阅读,否则,我建议先查看「从0开始:开发自己的游戏[0]」。

新建地图

首先,我们需要学习室外地图的绘制。为此,我们要新建一张地图。在「地图树」中,单击右键,选择新建地图。


在地图树中进行新建地图的操作


之后弹出一个窗口,你需要在这个窗口中设置你要新建的地图的参数。


新建地图窗口


基本设置中,「备注名称」和「显示名称」都是当前地图的名称设置。不同的是,「备注名称」只会显示在地图树界面中,作为给开发者的提示和备忘,而「显示名称」会在进行游戏时显示在游戏中一段时间后消失(回想一下口袋妖怪,在你进入新的地区时,你的游戏界面右上角会弹出一个名称框,显示着诸如“101号道路”之类的信息,显示名称就是如此功能)。在这里我们随意填写即可。

在「图块组」中,点击下拉列表,你可以查看到游戏中默认的所有图块组。什么是图块组呢?为了方便绘制不同地区的地图,开发者们需要根据地区特点将不同的图片素材储存到不同的组中,比如所有用来绘制室内地图的图片素材就储存在名为“室内地图”的组中,而绘制室外地图的素材就储存在名为“室外地图”的组中。在这里我们需要绘制的是“室外地图”,因此,我们更改图块组为“室外地图”。

宽度和高度定义了游戏地图的尺寸。在这里我们为了方便绘制,选择20x20这个并不大的尺寸即可。这里的数字20表示的是地图的长和宽都是20个计数单位。这个所谓的计数单位就是大家切换编辑模式到「事件模式」后显示在地图绘制区的方格,每一个小方格为16px(像素)长和16px宽。需要注意的是,以后的地图可能需要绘制超大的尺寸,比如一个繁华的都市可能需要80x80个单位,你需要合理使用缩放工具进行绘制。

循环类型中有4个选项:不循环、纵向循环、横向循环、纵横循环。循环的意思是角色从地图一边走出边界,会从对边的边界走入。在早期的《最终幻想》系列中,世界地图经常用到这个设定。我们此时选择不循环即可。

我们暂时跳过其他参数的讲解。此时你需要确定你的设置和下图一样,然后就可以点击确定创建一张地图。


基本参数的设置


认识图块

新建地图之后,你会看到默认的界面。这种一深一浅的蓝色格子在游戏中显示为一片漆黑。


新建地图之后的用户界面


左侧的图块区变成了室外地图的样子。接下来我要介绍图块区的相关内容。图块区分成了三个选项卡,A、B和C。其中,A选项卡中的图块用来绘制地表和墙壁等基层元素,而B及B以上的素材都是表层元素。使用更常见的解释就是,A层的图块属于底层图层,而B及B以上的图层属于上层图层,上层图层会遮盖底层图层。同时B及B以上的素材同属一个图层,不可以相互遮盖。

接下来我们选中草地的样式进行地表绘制。选中草地之后,使用绘制工具中的「油漆桶」,将地图全部涂成草坪。


绘制草地


注意,如果你选中草地图块之后,无法选中油漆桶进行绘制,请检查自己的编辑模式是否处于「地图模式」下。不知道编辑模式是什么或者不知道如何切换,请您查看上期的教程。

接下来,我们需要在光秃秃的草坪上绘制房屋。在左侧的图块区,你会看到有屋顶和墙壁系列图块:


用来绘制屋顶和墙壁的图块


下面选中屋顶,使用铅笔绘制工具,在地图绘制区绘制两排屋顶:


绘制房顶的屋瓦


你可以自己确定房屋的长度。绘制完成后选中下面的墙壁绘制房屋的墙体:


绘制房屋的墙体


一般来说为了美观性,你可以对屋顶和墙体的高度比例做出调整。但我不是设计师或者美工,我是程序员,美观性这个词这实在不是我的强项……

在你完成之后你就绘制了一个简单的房屋。接下来作为练习,你可以在地图绘制区绘制更多房屋。


继续绘制房屋


你可能觉得默认的图块样式很丑。你可以从你的美工那里获得更好看的图块资源。比如,我曾经购买一套价值300日元的素材,使用这些素材绘制房屋要显得好看一些。


更好看的图块素材



来自于其他开发者使用RMVA制作的游戏


要绘制出这样的地图需要好看的素材和耐心,以及好的美感和长时间练习。但接下来,让我们继续我们简单的地图绘制学习。

添加装饰


绘制完房屋之后,我们可以暂时告别图块区的A选项卡了。我们点击图块区的B、C选项卡,开始按照自己的意愿添加一些装饰。需要注意的是,你可以每次在图块区按住鼠标左键拉取一整块区域进行绘制,比如:


绘制一些树木


你可以自己进行测试。就如我前面说到的,B、C选项卡属于高层图层,可以遮盖A图层的图块(比如图中的书目就遮住了房子的墙体)。默认的地图图块很少,只有A、B、C三个选项卡。在你导入自己的素材之后,图块最多可以扩展到E。如果还是不够,我们往往使用Photoshop辅助绘制地图。当然了,这些我会在之后讲解。

当你绘制错误之后可以使用橡皮修改。B选项卡的第一个空白图块就是橡皮:


橡皮图块


如果你在A选项卡的图块绘制中发生错误,你可以直接使用正确的图块覆盖。A选项卡图块不存在橡皮的概念。

你可以使用图块区的一些图块搭配橡皮创造巧用,比如树林的样式。当然了,你也可以给你的房屋加一个门。


绘制完成的室外地图


室内地图绘制


接下来我们需要新建一张17x17地图进行室内地图的绘制。新建地图时,请选择图块组为“内部地图”,尺寸为17x17,其它参数不变。如果你忘记了如何新建地图,请你查看前文的教程。

室内地图的绘制有所区别。我们需要先使用墙体的上半部分画出房屋的大体轮廓。


绘制房屋的轮廓


接下来填充墙体。墙体一般来说为两个单位高。你需要发挥你的空间想象力,完善你的地图:


完善墙体。房子的雏形已经显现出来了


我们只需要铺设地板就可以完成房子的构建。选择一块合适的地板样式,为房间内部铺满地板。


为你的房间铺满地板


接下来你只需要进行简单的装饰就可以了。在你完成之后,你就可以在你的室外地图和室内地图中进行测试。测试的方法很简单,你需要切换编辑模式到事件模式下,将玩家的初始位置设置到你自己绘制的地图上,进入游戏测试即可。关于如何切换编辑模式和如何设置玩家初始位置,我在上一期教程中讲过,忘记的同学可以查看。


绘制地图完成后你可以进行测试


同样,你也可以使用自己的素材替换默认的丑陋的图块。

创世原料 - 认识不同规格的游戏素材


我带领大家学习了地图参数的设置、室外室内地图的简单绘制。在本期教程中,我会将地图绘制部分的教学收尾,并且带领大家从游戏文件夹开始认识游戏中的素材。

如果您没有看过之前的教程,或者在阅读本文时发现自己已经记不起以前的一些内容,建议您先查看往期的回顾,再继续本教程以确保效率。

地图的层级关系和如何删除地图

在地图树界面中,我们可以看到游戏中的所有地图。在这里我为每张地图设置了“备注名称”。要更改地图的参数,你可以在地图树上单击鼠标右键,选择地图设置,或者选中一张地图,按下空格键,在弹出的窗口中进行地图参数的重新设置。

地图树中,我们可以看到游戏地图的层级结构。目前我的三张地图“荒岛”、“室外小镇”、“民居”三张地图属于同一层级结构,在逻辑上属于并列关系。


地图树界面的地图层级结构关系


要改变层级结构,选中你要更改的地图进行拖动即可。比如接下来,我把“民居”地图拖动到“室外小镇”地图上。如此操作会将“民居”地图作为“室外小镇”的子地图。


更改了地图层级关系


在游戏制作中,我们往往需要按照地图的逻辑关系,在地图树中进行层级结构的调整。一般而言一个城镇下的所有民居都将作为这个城镇下的子地图。比如在我的项目中,各地图之间就具备鲜明的逻辑关系。


狄普恩镇的地图树


进行地图树的层级结构排列就像是进行代码缩进一样,不是必须的,但几乎是人人都知道的行业准则。

要想删除地图,只需要选中想要删除的地图并且按下delete键即可。你也可以在右键单击地图,在菜单中选择删除地图。要注意的是,一旦删除了一张地图,这张地图下的所有子地图也将被删除。

自动生成地下城

在游戏制作的过程中,如果你没有一个美工团队,而是自己作为独立开发者进行开发,你会遇到一个棘手的问题:地下城迷宫的绘制。每一个RPG游戏都有着数不胜数的地下城迷宫等待玩家探索。著名的“上古卷轴”系列游戏更是以此作为卖点。试想一下,每天重复大量的地下城迷宫绘制必然让你的大脑如同迷宫一样难以厘清。因此,RMVA提供了自动生成地下城的功能。

在地图树界面上,我们新建一张地图。这张地图可以略大,用作地下城的自动生成。在这里我将地图尺寸设置为40x40,且地图图块组使用迷宫图块。新建地图完成后,我们在这张新地图上单击鼠标右键,选择随机生成迷宫。


随机生成迷宫


在弹出的窗口中,你需要为你要生成的地下城设置墙壁和地面图块。这里我随意选择了类似于山窟的图块。选择完成后点击确定。你会发现系统自动为你随机生成了迷宫地图。你只需要稍加修改就可以使用了。


随机生成的地下城迷宫


如果对生成的迷宫不满意,你可以重复以上步骤。系统会每次为你随机生成新的迷宫。

认识游戏项目结构和素材规格

在这一部分我们需要学习相对于创造一个游戏世界来说显得“索然无味”的内容:认识游戏项目结构和素材规格。这一部分将十分重要,尤其是我们以后需要大量处理相关素材使用在游戏里,因此我将把这一部分放在制作游戏线性剧情的前面进行讲解。

我们在第一章教程中新建项目时,系统要求我们选择了项目储存目录。如果你现在还记得存储目录的话,请跟我一起打开它:


游戏项目文件夹


在游戏项目文件夹下,我们会看到如上图所示的若干目录和文件。接下来我将按照次序讲解。

Audio文件夹内存储着游戏中使用的一切声音文件。Audio文件夹下包括了用以储存背景音乐的BGM文件夹,用于储存背景声音的BGS文件夹,用以储存音效的ME文件夹和用于储存声效的SE文件夹。

其中ME属于场景音效,而SE属于声效,包括了开关门、开关宝箱、得到金钱等等短暂的声音信号。

你可能会发现在你的游戏项目文件夹下,Audio文件夹是空的,没有任何声音,但你在游戏中进行测试时依然会听到音乐和音效。这是因为在你没有向项目文件夹中导入任何素材时,RMVA将自动使用系统自带的素材。RMVA系统自带素材的储存目录在你的RMVA目录下的RTP文件夹中。

使用在游戏中的声音文件通常是.ogg格式。

Data文件夹内存储着游戏项目中的一切数据,包含地图数据、数据库数据等等。这些数据以rvdata2为扩展名,无法被直接编辑,只能从RMVA中进行修改。

Graphics文件夹内储存着游戏项目中的一切图片素材。打开Graphics文件夹后,你可以看到很多子文件夹。

Animation文件夹:存储技能动画。技能动画是图片形式,分割成帧,并且在数据库中进行编辑。下图就展示了技能怒雷的图片:


技能“怒雷”的图片,进行分割和排列后就会形成动画


battlebasks文件夹:存储着游戏中的战斗场景背景图。游戏中的战斗场景由battlebacks1和battlebacks2两个文件夹中的图片拼成。在讲到数据库的时候我们还会说到战斗系统。

battlers文件夹:存储着游戏中的敌人战斗形象。下图是我从RMVA的系统自带素材中截取的敌人形象。你可以从网络上和美术那里获得敌人的形象图片。


其中一张敌人形象图


characters文件夹:存储着游戏中的角色行走图。什么是行走图呢?我们随便打开一张RMVA系统自带的素材(RMVA系统自带素材的储存目录在你的RMVA安装目录下的RTP文件夹中):


系统自带素材中的一张角色行走图


每张行走图包含八个角色行走时候的样子,每个角色又分为四个面向(上下左右),每个面向又分为三帧(迈左脚、站立不动、迈右脚)。你在游戏中控制角色行走时,系统就会自动循环播放行走图形成动画。

当然,行走图中还可以包含非角色的图片,比如下图:


也属于行走图的门


这张图中的门也和角色行走图类似,在游戏中可以像角色行走那样循环播放开门、关门的图画,形成动画效果。因此,当你自行设计和绘制行走图的时候应当注意其规格。

在浏览RMVA系统自带的行走图素材时,你会发现名称以!$开头的图片素材。这种图片每张只包含一个角色的四面向行走图。因此当你要导入游戏中的行走图素材只包含一个角色的时候,你应当将图片命名为以!$开头的格式。


只包含一个角色的行走图以!$作为文件名称的前缀


faces文件夹:储存角色说话时显示在对话框中的脸部肖像图。


脸部肖像图


Parallaxes文件夹:储存着游戏中的远景图案。什么是远景图呢?在著名游戏《地下城与勇士》中,地图可以简略分成地面、背景。其中,背景部分被我们称为远景,远景图可以营造出远距离的风景样式。由于远景图可有设置卷动,所以远景图和地图的配合可以加强视觉效果。


远景图的样例


在上面的图中,山地草坪使用图块组进行的绘制,而月亮和黑夜的天空图片就是远景图。这样会使地图的立体感和表现力增强。我们会在后面讲解远景图的设置和使用。

System文件夹:储存着游戏系统需要读取的图片。我们打开RMVA自带素材中的System文件夹,查看一下其中的图片:


System文件夹中的图片


其中Balloon图片储存着角色的气泡表情,比如惊叹,疑惑,爱慕等等。BattleStart是战斗开始时画面的渐变样式。GameOver是游戏结束之后的界面。Iconset是游戏中所有道具的小图标,在数据库中我们会见到。Shadow是角色脚下的阴影。Window是游戏中对话框和菜单等窗口的皮肤。这些图片都可以被替换。

Tilesets文件夹:储存着游戏的地图图块组。你可以将准备好的地图图块导入进去,替换系统默认的图块区的丑陋图块。在之后的数据库讲解中,我们还会详细地讲解如何设置和扩展图块区的图块。

Titles文件夹:储存着游戏的标题图片。游戏的标题图片出现在游戏开始界面,和战斗背景Battlebacks相同,游戏标题图片也是由两个Titles1和Title2文件夹中的图片拼合而成。

Graphics文件夹中的全部子文件夹到这里讲解完毕。大多数图片均是以png格式为佳,当然你也可以使用jpg格式,但涉及到有透明度通道的图片,请一定使用png格式(因为jpg格式会剔除alpha通道)。接下来我们离开Graphic文件夹,继续查看游戏项目根目录下面的其他文件夹。

Movies文件夹中储存着游戏中的影片文件,比如片头CG和过场动画。

System文件夹储存着游戏的扩展文件,在初级开发阶段请不要移动或者更改System文件夹中的内容。

Game.exe是游戏项目的可执行文件。你可以双击直接运行游戏,但以这样的方式运行并不是在调试模式下,而是普通玩家的游戏入口。

Game.ini是游戏的配置文件。我们在以后会对其中的项目进行更改,但现在请保持这个文件原样不动。

Game.rvproj2是游戏项目的可编辑文件,你每次都需要双击这个文件打开RMVA,进而编辑项目。当然了,在你的游戏制作完成之后,你可以删除这个文件。因为玩家并不需要对游戏项目进行编辑了。

以上就是游戏项目中的全部文件夹和他们的用途。你可以简单地将你想要增加的素材复制粘贴到游戏项目对应的目录中,然后你就可以在该项目里使用自己添加的素材。


你可以从网络上获取更多的素材


如果本系列教程反响较好,我会逐步公开我制作游戏时用到的免费非商业授权素材,也可以推荐一些支持商业授权的素材网站(日本网站居多,需要VPN)。在以后的教程中我的讲解还是以RMVA自带素材为主。对于没有VPN或者Visa用于购买正版素材的朋友可以转账给我,我也可以代为付款。

还是我在第一期教程里说过的那句话,请大家千万不要小看这款游戏开发工具。使用RM系列引擎制作的著名游戏《血雨》和《血雨2》就被出版商看中。并且,在之后教程中,一旦你掌握了Ruby编程语言,你甚至可以开发自己的《口袋妖怪》或《最终幻想》。


学习造人 - 添加NPC和简单的游戏事件

在一个游戏中,游戏世界里的生物往往由玩家和NPC(不可操控角色)构成。玩家和NPC之间的交互已经是RPG游戏的固定模式之一,几乎每个RPG游戏都会设计或多或少的可交互NPC。甚至,类似于《辐射3》、《上古卷轴5》这样拥有庞大世界观的游戏中,NPC甚至对玩家有“情感”的概念,而且NPC的性格也决定了不同的NPC会对玩家的某一行为做出不同的反应。

在本章教程,我们就来试着添加NPC和简单的游戏事件。

那么什么是游戏事件呢?我给游戏事件的定义是:在游戏中,由玩家或者游戏逻辑本身触发的、为达到推动游戏进程或完成某个游戏动作的行为。比如,在商店完成一次交易、走进传送门传送到另一个地点、向NPC交还已经完成的任务等等都属于游戏事件。

比如,在我们第2期教程中已经完成的室内和室外地图建立一个移动事件——在室外地图的时候可以走进绿色屋顶的房间门,从而让玩家跳转到另一个场景——室内。

首先我们要切换编辑模式为“事件模式”。切换到事件模式之后,你无法绘制地图,并且地图被划分成不同的小方格。你可以在每个小方格中都建立一个游戏事件。


事件编辑模式下的地图


我们选中绿色屋顶的房子,在黑洞洞的拱形门洞上单击右键,选择快速新建特定事件,并在子菜单中选择门扉。


快速新建事件


在弹出的窗口中,你可以选择门的样式——双击“门扉图像”。因为我们为墙壁上画上了拱形的门洞,因此我们在这里需要选择拱形门。


选择拱形门的图像


目标位置为玩家打开门后通向的地点。我们需要选择为室内地图的门口位置。如图:


选择目标位置


完成后点击确定,一个门扉事件就已经被建立了。我们可以看到地图上,绿色房子的墙壁上已经出现了一个拱形门的方块。我们可以双击这个方块进而打开事件页。


游戏事件的事件页


我们来详细讲解这个被我们快速构建的门扉事件。这个窗口中,左上角的【名称】框中的名称可以随意编辑,这是为了防止开发者忘记这个事件的作用而进行的备注。

【出现条件】中为当前的游戏事件出现需要满足的条件。在这里我们不需要设置任何条件,因为这个门将一直存在,不需要达成特定条件才出现。而相反,其他一些事件可能需要设置出现条件——比如送信任务中,你必须接受了任务或者持有信件时,收信人才会出现在地图上。

【图像】为事件的图像,双击可以选择其他图像,如果设置成人形,就相当于建立了一个NPC。在某些情况下,你也可以设置图像为空,这样事件会存在在游戏中但不会显示出来,我们经常这样实现一些游戏逻辑,比如进入在两次进入城镇的时候根据剧情差异播放两首不同的BGM等等。

【自主移动】中可以为事件设置移动的方式。比如《口袋妖怪》中的NPC经常以不同的方式在地图上随机移动或按照指定的路线移动,就是使用这个功能模块达成的。在这个例子中,我们可不希望房门也随机移动,所以我们需要将移动方式设置为“固定”。在其他的几种移动方式中,“接近”的意思是不断接近玩家,在某些躲避游戏中也经常使用。

【选项】中有四个选项。其中步行动画的意思是该事件在移动的时候将行走图循环播放形成行走动画;踏步动画是即使该事件不移动也播放行走动画;固定朝向是该事件的朝向不会更改(比如如果该事件是一个NPC,那么勾选此项将导致NPC的脸只朝向固定方位);允许穿透是允许该事件和其他事件碰撞后穿过彼此,类似于其他游戏引擎中的“非碰撞体”概念。

【优先级】略过,你可以将鼠标悬停在选项上查看说明,很简单。

【触发条件】中有多种触发条件。你可以悬停鼠标在这一部分,来查看不同触发条件之间的区别。需要注意的是,触发条件和刚才说过的出现条件不同,即使没有达到触发条件,该事件还是会出现在地图上。但如果没有达到出现条件,则该事件是不会在游戏中显示和执行的。

在右侧的【执行内容】中,是该事件的“代码”。我之所以说RMVA这款游戏引擎适合初学者,就是因为它对不会编程的代码苦手很友好。这些代码本来应该由程序员编制,RMVA不仅简单地将代码命令化,而且还使用了大家熟悉的可读文本,而不是编程语言。

【执行内容】中的代码文本我们称为事件命令或事件逻辑。我们看看这个门的事件命令:


门扉事件的事件命令


一旦事件被触发,事件命令就会按次序执行。在这个门扉事件中,首先会播放开门的声效,然后是一串“移动路线”指令用来播放开门的动画。紧接着玩家会向前移动一步。之后会播放脚步声的声效,并且进行场所移动,移动到室内地图的指定坐标。

我们可以将玩家的初始位置设置在室外地图上,然后测试游戏,走到绿色房子前,果然,主角打开了门并且进入到室内。

测试结束之后,我们来新建一个事件。在事件编辑模式下,双击一个空白的小方格建立一个新事件。在弹出的事件页中,我们选择一个看着顺眼的NPC图像。在右侧的【执行内容】列表中,我们双击空行,添加一条新的【事件指令】:显示文字。


新建游戏事件的事件页



显示文字命令的编辑窗口


我们双击角色肖像图来选择角色的面部肖像。如果大家还有印象,我在上一期教程中说过,角色肖像图储存在Graphics => Faces文件夹下。

我们在文字框中输入“欢迎你,冒险者。”


完成NPC的对话设置


之后点击确定,完成文字显示命令的添加。这时,你的事件页应该是下面的样子:


完成后的事件页


之后我们可以设置该事件的【自主移动】类型为随机,移动的速度和频率都可以随机调整。完成设定之后点击确定关闭,一个新的NPC(其本质依然是游戏事件)就被创建好了。

测试游戏后,我们的玩家已经可以和NPC进行对话了:


游戏中的测试效果


至此为止我们就已经学习了游戏事件的创建。我们将在下几期教程讲解复杂游戏逻辑的实现。也就是事件指令中的【流程控制】部分和【条件控制】部分。


事件指令


大家也可以随意测试其他的事件指令。比如我留一个小作业:创建一个NPC富豪,每次和富豪对话一次会获得100金币。创建另一个NPC乞丐,每和乞丐对话一次可以选择是否施舍乞丐,是的话则乞丐会提升主角1级。(关于如何选择施舍乞丐与否,你可以在事件指令中【信息】=>【显示选项】中完成设置)。

线性流程 - 学习游戏开关和变量与事件的配合

在上一章教程中,我简单介绍了快速新建特定事件和游戏事件的概念、定义和创建方法。本期教程我将主要讲解事件指令中的“条件控制”部分和“流程控制”部分,制作一个简单的任务剧情。请喜欢本系列教程的朋友们关注我,避免错过更新动态。

如果您没有看过之前的教程,或者在阅读本文时发现自己已经记不起以前的一些内容,建议您先查看往期的回顾,再继续本教程以确保效率。

条件控制 指令

如果大家还记得怎样新建一个游戏事件,请新建一个并且选择一个合适的图像使这个游戏事件成为一个NPC。我在这里依旧使用上期教程中的士兵形象。我将带领大家进行一个游戏任务的制作,玩家控制的角色可以接受任务并且完成它。这是标准RPG游戏中的流程。

上一章的游戏事件,是一个士兵形象的NPC


在右侧的执行内容中,已经有了一条上期教程中添加的事件指令。若要删除该条指令,选中按下delete键即可。这里我们选中该条指令,按下space键,达到修改该条指令的效果。

注意,几乎任何时候按下space键都能够起到修改作用,例如在事件页中按空格键可以修改当前事件指令的参数;在地图树中按空格键可以修改当前地图的参数。

按下空格建修改这条“显示文字”指令,在弹出的窗口内输入下图所示的文字,然后确定,完成修改。

修改之后的文字显示指令


在这条显示文字的指令中,我使用了转义控制符。和大多数编程语言一样,转义控制符以反斜杠开始,通过不同的规则使文字显示内容变化。比如这条文字显示指令中,我使用了\c[6] \c[0]两个颜色控制符,转换了“皇家塔洛斯守卫军”文字的颜色为黄色。我还使用了\i[192]这个图标绘制控制符,在对话窗口的“生命药剂”文字前绘制了第192号图标(外形是个药瓶的样子)。

在游戏中的预览结果就是下图这样。转义控制符被更换为不同的显示效果。


转义控制符的使用


之后我们为了让玩家能够自由选择是否接受NPC士兵给出的任务,我们需要添加一个“显示选项”指令,让玩家能够根据自己的想法选择回复:


显示选项指令


按照上图设置完成,确定之后会发现事件页的执行内容中出现了显示选项的指令和两个分支。其中,选择第二项(也就是“我没时间”)的情形被默认为取消,选择第一项“我愿意”即为接受任务的回答。


事件指令的执行内容中出现了选择分歧


在玩家选择接受了任务之后,我们需要设置一个开关。什么是开关呢?开关有ON(开)和OFF(关)两个状态,相当于程序设计中布尔值(逻辑值)的TRUE和FALSE。我们常常使用开关的状态来设计游戏进程。


玩家选择接受任务的时候


在“我愿意”的选择分支下,新建一条事件指令,点击事件指令中的开关操作,打开开关操作窗口。我们在这里可以调整游戏中开关的数量。注意的是如果大量使用开关可能造成卡顿。在这里我不更改默认数量,直接在0001号开关的名称框内输入“玩家接受了任务。”

开关的名称相当于注释,不会起任何作用,因此即使是空白也是可以的。但是为了保证我们不会混淆这些开关,我们需要设置名称,且名称需要容易辨认。


为游戏开关合理命名,避免混淆


这里0001号开关的用途是:当开关打开时表示玩家接受了任务,当开关关闭时表示玩家拒绝接受任务。因此我将名称设置为“玩家接受了任务”。点击确定,完成开关的操作。


完成NPC分配任务的环节


注意:为了简便,我将这个任务更改为皇家塔洛斯卫队只需要一个恢复药剂,特此说明

接下来我们需要新建一个事件页。点击游戏事件窗口的新建事件页创建一个新的事件页:


新建一个事件页


新的事件页(事件页2)和旧的事件页(事件页1)仍属于同一个游戏事件。当一个游戏事件内有多个事件页存在的时候,游戏会检测事件页出现的条件,只执行满足出现条件的事件页。如果有多个事件页都符合出现条件, 则按照事件页编号从大到小的顺序开始。因而,这两个事件页都同属于在游戏开发中,我们往往需要使用多个事件页模拟不同时期NPC的表现。

在这个例子中,事件页1的事件指令用于模拟玩家接受任务前NPC的表现,事件页2的事件指令用于模拟玩家接受任务后到完成任务前NPC的表现。也就是说只要玩家不接受任务,则在和NPC对话时事件1会一直执行。当玩家接受了任务之后,则事件1不再执行,玩家和NPC对话的时候执行事件2。

在事件2中我们需要设置事件页2的出现条件。事件页2必须是在玩家接受任务之后才能出现的,所以我们需要将事件页2的出现条件设置为:开关0001:玩家接受了任务 开启时。

同时,事件页2的图像也要设置成和事件页1一样,即都设置成士兵的样子。否则玩家接受了任务之后,事件页1不再执行,转而执行事件页2的时候,NPC的样子突然改变,可能会让玩家吓一大跳。

在事件页2中,我们为了检测玩家是否完成了任务,需要引入一个条件判断。我们双击执行内容处的空白,新建一条事件指令,在弹出的事件指令中,我们选择分支条件:


分支条件


分支条件窗口中,你需要设置作为分歧条件的项目。比如这里我选择的分支条件是玩家是否持有生命药剂。如果玩家持有生命药剂,则视为任务完成,否则,视为任务没有完成。


条件判断,用来判断是否满足指定条件


在判定任务完成之后,我们需要在玩家持有恢复药剂的时候减去玩家手中的药剂,作为角色交付给NPC的任务道具。我们在持有恢复剂的条件下新建一条事件指令,找到增减物品操作,进行如图设置:



增减物品的操作


在没有完成任务的场合,我们可以让NPC说一句话提示玩家。设置完成后,事件页2应该如下图所示:


最新评论
暂无评论
参与评论

商务合作 查看更多

编辑推荐 查看更多