我是Lem0,自学倡导者,执迷于“不务正业”,被批评“旁门左道”。我注册并使用简书,希望能够记录一些我记不住的事情,或者与大家一起共享知识,共同学习。
往期回顾(点击链接访问):
「从0开始:开发自己的游戏[0]」
「从0开始:开发自己的游戏[1]」
「从0开始:开发自己的游戏[2]」
「从0开始:开发自己的游戏[3]」
有两三天没更新教程,因为时间不允许。但我依然会尽量回复大家的评论和私信,再次对各位的鼓励和欣赏表示感谢。
在上一期教程中,我简单介绍了快速新建特定事件和游戏事件的概念、定义和创建方法。本期教程我将主要讲解事件指令中的“条件控制”部分和“流程控制”部分,制作一个简单的任务剧情。请喜欢本系列教程的朋友们关注我,避免错过更新动态。
如果您没有看过之前的教程,或者在阅读本文时发现自己已经记不起以前的一些内容,建议您先查看往期的回顾,再继续本教程以确保效率。
5、线性流程 - 学习游戏开关和变量与事件的配合
条件控制 指令
如果大家还记得怎样新建一个游戏事件,请新建一个并且选择一个合适的图像使这个游戏事件成为一个NPC。我在这里依旧使用上期教程中的士兵形象。我将带领大家进行一个游戏任务的制作,玩家控制的角色可以接受任务并且完成它。这是标准RPG游戏中的流程。
在右侧的执行内容中,已经有了一条上期教程中添加的事件指令。若要删除该条指令,选中按下delete键即可。这里我们选中该条指令,按下space键,达到修改该条指令的效果。
注意,几乎任何时候按下space键都能够起到修改作用,例如在事件页中按空格键可以修改当前事件指令的参数;在地图树中按空格键可以修改当前地图的参数。
按下空格建修改这条“显示文字”指令,在弹出的窗口内输入下图所示的文字,然后确定,完成修改。
在这条显示文字的指令中,我使用了转义控制符。和大多数编程语言一样,转义控制符以反斜杠开始,通过不同的规则使文字显示内容变化。比如这条文字显示指令中,我使用了<code>\c[6] \c[0]</code>两个颜色控制符,转换了“皇家塔洛斯守卫军”文字的颜色为黄色。我还使用了<code>\i[192]</code>这个图标绘制控制符,在对话窗口的“生命药剂”文字前绘制了第192号图标(外形是个药瓶的样子)。
在游戏中的预览结果就是下图这样。转义控制符被更换为不同的显示效果。
之后我们为了让玩家能够自由选择是否接受NPC士兵给出的任务,我们需要添加一个“显示选项”指令,让玩家能够根据自己的想法选择回复:
按照上图设置完成,确定之后会发现事件页的执行内容中出现了显示选项的指令和两个分支。其中,选择第二项(也就是“我没时间”)的情形被默认为取消,选择第一项“我愿意”即为接受任务的回答。
在玩家选择接受了任务之后,我们需要设置一个开关。什么是开关呢?开关有ON(开)和OFF(关)两个状态,相当于程序设计中布尔值(逻辑值)的TRUE和FALSE。我们常常使用开关的状态来设计游戏进程。
在“我愿意”的选择分支下,新建一条事件指令,点击事件指令中的开关操作,打开开关操作窗口。我们在这里可以调整游戏中开关的数量。注意的是如果大量使用开关可能造成卡顿。在这里我不更改默认数量,直接在0001号开关的名称框内输入“玩家接受了任务。”
开关的名称相当于注释,不会起任何作用,因此即使是空白也是可以的。但是为了保证我们不会混淆这些开关,我们需要设置名称,且名称需要容易辨认。
这里0001号开关的用途是:当开关打开时表示玩家接受了任务,当开关关闭时表示玩家拒绝接受任务。因此我将名称设置为“玩家接受了任务”。点击确定,完成开关的操作。
注意:为了简便,我将这个任务更改为皇家塔洛斯卫队只需要一个恢复药剂,特此说明
接下来我们需要新建一个事件页。点击游戏事件窗口的新建事件页创建一个新的事件页:
新的事件页(事件页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应该如下图所示:
之后我们需要在前几期教程创建的室内地图中摆放一个游戏事件,用来给玩家增加一个治疗药剂。
创建的游戏事件用来为玩家增加治疗药剂。但是增加或减少物品并不会在游戏中提示,也就是说你对着桌子按下确定键,不会有一个窗口弹出老提示你获得了某某道具。你需要打开背包查看物品列表。
在创建药剂事件时,一定要注意将本事件的优先级设置为与人物同层。
之后我们创建一个快速事件,选择场所移动,将移动目标设置为室外地图的房屋门口,让玩家在获得了药剂的时候可以回到室外交付任务。
确认无误后,我们运行游戏进行测试。以下是游戏测试效果图:
但到这里还有一些BUG。可能在调试过程中大家都发现了一些问题,我们需要在下一节教程的时候修复。
这里我先列出一些存在的错误:
当玩家完成任务后,如果背包内没有药剂,则下次和NPC对话,依然会提示“没有完成任务”。
当玩家完成任务后,如果背包内还有药剂,则下次和NPC对话时,任务会重复交付,玩家依然会被扣除恢复药剂。
在室内地图中,玩家可以重复领取恢复药剂。桌子上药剂这个游戏事件不会消失。
...
请大家尝试利用已经学习的开关和事件页尝试解决这些遗留问题。我将在下节教程进行讲解。
我由于长期加班,拖到今天才完成了本篇教程。时间仓促,如有任何问题都可以私信告知,我将尽快回复。
感谢大家的关注。如您喜欢本系列教程,请关注我以免错过更新动态。
如果您是游戏美术,或者有数位板的美术从业人士、学生等各路大神,对“未来游戏计划”感兴趣,请私信联系我。
我是Lem0,自学倡导者,执迷于“不务正业”,被批评“旁门左道”。与大家分享英语/编程/高效自学的所思所想。
已授权“版权印”进行版权保护。获取授权
<a>TBC 未完待续</a>