|
上一期教程,我们把进入游戏的玩家放到了一个小屋子里,然后统计了进入游戏的玩家人数。
这一期教程里,我们要让玩家能够从小屋子传送到羊毛区域。
做完后实现的效果是:
人数不足时提示玩家开始游戏所需的人数;
人数满足要求后,倒计时3秒,然后把所有玩家传入到羊毛区域;
下面就按顺序说明这些效果如何实现。
这一期用到的主要都是逻辑编辑器的功能。如果碰到一些基础概念觉得不理解的,可以回顾一下前两期教程哦。
1 人数不足时提示玩家
在开始前,先介绍一下临时变量节点的改动。在之前的版本中,临时变量有3个节点:
使用时需要先添加临时变量,然后再设置或读取临时变量的值。
当前版本中,去掉了“添加临时变量”节点。然后“设置临时变量”时会先检查该临时变量是否存在,不存在的话就会添加临时变量,然后再设置它的值。
在上一期教程中,我们用临时变量playerNum统计了当前玩家的人数。
现在我们设定要2个人加入游戏才能够开始游戏,在第1个人加入时提示玩家“当前人数1人,2个人可以开始游戏”,在第2个人加入时提示玩家“当前人数2人,即将开始游戏”。按下图连接节点。
红框内是我们新加的节点,其中延迟节点是之前未用过的节点(逻辑节点->控制节点->延迟节点),其作用为当执行到该节点时,延迟一定时间再继续执行后续节点。因为玩家加入游戏时会有一个加载过程,所以延迟一定时间再显示提示,避免新加入的玩家看不到。
新加的逻辑会判断当前有多少人,如果没有超过1人就执行下面这条指令:
/say §c当前人数1人,2个人可以开始游戏
如果超过了1个人就执行下面这条指令:
/say §a当前人数2人,即将开始游戏
指令的效果是在界面的左上角显示一条文本提示,像下图这样的效果。
如果想修改提示内容,只需要修改指令中的“§c当前人数1人,2个人可以开始游戏”这部分就可以了。§c表示文字是红色,§a表示文字是绿色。
2 人数满足要求后倒计时3秒传入游戏区域
为了方便后面的测试。我们先把人数要求改成1人,也就是判断人数中的数字从1改成0。
这样只要进入游戏就满足判断条件了。
倒计时怎么做呢,就用前面提到的延迟节点,每延迟1秒提示一次玩家,延迟3秒后,把玩家传入到羊毛区域。
类似下面这样的连接:
其中isCounting这个临时变量用来标志是否进入了倒计时。为了确保在“世界定时刷新”事件中,isCounting这个临时变量已经存在,我们在“世界创建完成”节点中设置它的值为0(相当于添加这个变量并初始化它的值为0,见下图中红框部分)。因为“世界创建完成”是所有事件节点中第一个执行的,很适合用来做一些初始化内容。
前面倒计时的连法中,因为有了isCounting的限制,“假”那个分支只会走一遍,然后依次延时一秒后打印“+++t3”、“+++t2”、“+++t1”。这样我们倒计时的功能框架就有了。
在继续完善这个功能之前,我们先来看下目前的整个节点图的情况。
可以看到,现在节点已经很多了,看起来就很复杂,如果想要修改某个地方,找起来会有点费劲。可以想象,等我们把整个游戏都做完后,节点的数量还会膨胀几倍,最后的节点图恐怕连我们自己维护起来都很困难了。
宏功能(Macro)就是为了解决这个问题。宏是可以复用的节点图(有些像编程中的函数),重复使用的功能或者比较独立的功能,都可以做成宏。
下面我们就把倒计时的功能做成宏。
点击Macro界面的“+”号。
将宏命名为“倒计时”.
点击“+”时,会在右侧出现宏的分页,在这里编辑宏里的节点。
这里的“输入”就是宏的起始节点,必须从“输入”开始连接节点,“输出”是宏的结束节点,宏内的逻辑线连接到“输出”节点才会继续在主节点图中向后传播(这句话不明白没关系,继续往后看)。
新建好的宏,可以直接拖入到主ets生成一个节点。
下面我们把刚才倒计时的逻辑转移到“倒计时”宏内后,就是下面这样子。
在主ets上,把倒计时宏连到了“世界定时刷新”节点上(下图)。节点图的结构变得一目了然。
需要说明的是,如果倒计时宏内“真”那条支线连接到“输出”,那么无论是否在倒计时,“倒计时”节点后的节点都会继续执行;而如果 “真”那条支线不连接到“输出”,那么这个宏只会在进入倒计时后,继续往后执行1次。我们这里用不连接的方式。
好了,我们继续完善倒计时宏。按下图的方式修改倒计时宏的连线。
指令 /title @a title 3 表示在屏幕上显示“3”,效果如下图。上图的逻辑就会在屏幕上依次显示3、2、1。
执行指令是需要玩家的,在宏里并没有玩家这个参数。我们可以用临时变量把玩家参数传进来。也可以用设置宏的输入参数的方式(目前设置宏的输入参数的功能还不够完善和稳定,预计将在8月初优化完成)。
这里会用到两个新节点:设置临时变量(实体)、读取临时变量(实体)。
这两个节点和设置临时变量(数字)、读取临时变量(数字)基本一样,只是数值类型为实体,如果我们要存生物、玩家等实体的信息,就需要用到这两个临时变量节点。
在玩家加入世界节点后设置一个lastPlayer临时变量,用来存储最新加入世界的玩家。
倒计时宏内做了如下改动,取到lastPlayer的值,把它作为执行指令的主体。
这样我们的倒计时功能就基本完成了。
为了让主ets的逻辑更加清晰,我们把功能都整理为宏的形式,具体过程和倒计时宏基本相同,不再赘述,最后的结果如下。
目前的节点图,会存在两个问题:
倒计时没有和玩家数量关联起来,不符合人数满足后才开始倒计时的需求。
“世界定时刷新”事件会比“玩家加入世界”先执行,导致倒计时宏内取lastPlayer时并没有取到玩家。
这两个问题要解决,意味着我们要对游戏逻辑的先后顺序做一个安排,先执行了A,再执行B,然后才是C。我们用临时变量来实现这个顺序的管理。把isCounting变量修改为stage,stage变量的值在不同阶段的值如下:
“世界创建完成”时stage值为0。
“玩家加入世界”事件中,当玩家人数满足要求时stage值为1。
“倒计时”在stage为1时才执行,进入倒计时后stage值修改为2。
倒计时结束后stage的值设为3。
stage为3后,将玩家传送至羊毛区域,然后把stage值修改为4。
按照这个设计,修改后的节点图如下图。修改后,我们把设置和判断stage值的节点都放在了主ets里,这样我们能够在主节点图看到流程的路径。
图片里我们标注了①~④这些修改了stage的值的地方。
①:这里在人数提示满足要求后把stage改为1,可以让“世界定时刷新”事件后的节点进入倒计时。为了让人数不满足要求时不修改stage的值。“人数提示”宏改成了下面这样:
在宏内,当人数不满足要求时,节点没有连接到“输出”。那么在主ets里,人数不满足要求时,“人数提示”节点后的节点不会被执行到。
②④:进入判断后马上修改stage的值,这样保证该条支线的逻辑只会被执行1次。
③:倒计时结束后设置stage为3,然后将执行“传送到羊毛区域”的宏。
可能你会注意到判断相等时用的是1.0、3.0而不是1、3,这是因为判断节点内部会把数字转为字符串进行比较,而stage的值是浮点数而不是整数,所以会出现这样的情况。如果判断不准要填什么,可以先打印下要判断的值是多少,然后把打印出来的值填进来。
“传送到羊毛区域”宏的节点图如下,做的事情很简单,把玩家传送到羊毛区域的一个坐标。
这次的教程就到这里了。下一期教程我们将会让不同玩家脚底的羊毛变成不同颜色,并且统计不同羊毛的数量。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|