加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有账号?注册会员
×
本帖最后由 yooz 于 2023-11-8 23:18 编辑
(写在开头:这个系列主要是一些面向萌新的小玩法的教学,内容较为基础,所以对熟练基础事件的rm老手比较简单,大概一眼看出解法。如果有兴趣,也可以对这类谜题的事件进行优化)
题目:制作一个一次性的溜冰房
内容:大家很多人应该都玩过宝可梦,其中有一个冰系道馆,要求玩家从房间的所有冰面上踩过才能通关,一旦玩家重复经过了某一冰面,就会从冰上掉下去,题目中的溜冰房就是指这样的机关(如下图:)
要求:①经过冰面时,冰面发生变化;②重复经过某一冰面时,会触发机关掉落会初始房间或重生点、或判定游戏失败;③踩完所有冰面后,开启终点的机关门,在此之前机关门不会开启
提示:谜题组成部分——冰面事件、门事件
附件:冰面素材——
┕
┕
┕
┕
┕
┕
┕
[fold=参考答案]
制作这样的玩法,第一步我们当然是要制作冰面,由题可得,该冰面事件存在三种状态:常态、破损、漏洞(失败)。
既然如此,我们就能确定该事件至少有三个事件页,为了让事件页之间切换自如、切换条件又不至于太过繁琐,我们可以通过设置独立开关为事件页的开启条件,保证冰面在三种状态间的切换。
此时,我们已经确定了事件页的数量以及事件页的开启条件,接下来我们需要分析事件页的触发条件。
很显然,因为要玩家踏上冰面时才能够触发事件,所以前两种状态(事件页1和事件页2)的触发条件应该是玩家接触执行,但事件页3的作用是直接判定游戏失败,为了使判定顺利执行,事件页3的触发
条件应该为 并行处理 or 自动执行(因为并行处理时,有玩家再次移动导致人物位移的风险,所以这里采取自动执行)。
那么,最终决定好的事件页基础参数如下:
决定好事件页基础参数以后,我们来做事件页的执行内容。
首先先把独立开关的操作一一打上,这个不用多说,在事件页1和事件页2分别打上独立开关A和独立开关B的开启即可。
接下来继续分析题目需求,我们可以知道,题目中要求了终点处的机关门要在踩完所有冰面后才可以开启,所以,我们需要记录已经通过的冰面数量;为了不让触发条件阻碍变量更新,这一步骤要放在事件页1中:
事件页1最终
因为是一次性的溜冰机关,事件页2只起一个过渡效果,所以不用做得太复杂:
在事件页3中,由于玩家已经触发了失败判定,所以只需要一个场所移动将玩家传送回初始房间或重生点即可。
值得注意的是,当重生点与溜冰谜题处于同一个房间时,最好添加一个“暂时消除事件”之类的功能以停止事件的执行,避免卡死。
最后,为了画面效果,我们在“场所移动”与“暂时消除事件”之外再写一些修饰性的命令就好了:
做好冰面事件后,只剩下了比较简单的门事件。机关门十分简单,比较核心的无非判定就是加上事件页的切换,其中再点缀一些动画效果:
值得注意的是,判定中,“通关目标”这一变量必须在进入游戏地图前就设置好,否则将导致机关门提前开启(原因是在进入地图的瞬间,0===0)
至此一次性的溜冰房就做完了,只需要复制粘贴事件铺设游戏道路,即可完成谜题玩法的制作。 [/fold]
[fold=进阶方案]
相信大家也注意到,题目中特别用了“一次性”这个词语来形容。
这是因为在之前的事件中,我们是通过独立开关来对事件页进行切换的,这样虽然方便,但是再次进入游戏地图后,机关基本就废掉了,无法重置。
通常情况下,我们可以通过将独立开关替换为开关或变量来解决这个问题,但这样的操作还是过于繁琐,并且存在出问题的风险,故此,我们需要借助脚本的力量,对整个地图的独立事件进行操作。
由于个人认为用上脚本后已经不能被称之为纯事件了,所以将这个方案放在进阶方案内,以下是进阶方案的事件:
以下是进阶方案中使用到的脚本:
- var mapId = $gameMap.mapId(); // 获取当前地图的ID
- var eventIds = $gameMap.events().map(function(event) {
- return event.eventId(); // 获取当前地图中所有事件的ID
- });
- eventIds.forEach(function(eventId) {
- $gameSelfSwitches.setValue([mapId, eventId, 'A'], false); // 关闭独立开关A
- $gameSelfSwitches.setValue([mapId, eventId, 'B'], false); // 关闭独立开关B
- // 以此类推,根据你的需要关闭其他独立开关
- });
复制代码
进阶方案-范例工程:
工程内的范例地图通关路线请查看区块id,例如:
[/fold]
|