粉丝101获赞771


画面中是一个内联形式的对话框,他有一个空减,就是用来输入数字的,那他的作用就是我们点击发送按钮之后,会向全体玩家发送一条 name, 然后后面就是我们输入数字的这样一条信息。 那我们来游戏里试一下,我们执行这个函数,打开对话框,然后我们随便选择一个数字,然后点击发送,这样就可以在聊天栏发送 name, 然后后面是我们输入数字的这样一条信息,这个是没有问题的,对吧? 那要实现刚刚那个功能的话,还是非常简单的,相信看我视频的大部分人都会。那现在我想给他再加一个功能, 就是我们刚才在发送这个命令的时候,他是输入是一个 name, 然后后面一个我们这个的数字,是吧?那我现在想给他加个功能,就是这个 name 会变成我们执行者的名字,就是我谁谁发送的,那就是给他显示谁的名字,那这要怎么弄呢? 那可能有些小伙伴在做这一步的时候可能就会碰到点问题啊,我们来做一下。众所周知啊,对话框中是不能用文本组列中的动态组列的,也就是说我们这边是不能用 selector 来选择这个执行者的,那我们要让这个 turbo 输出这个执行者的名字的话,那是不是要只能靠这个红了? 那我们在外外部啊,假设我这条指令是已经获取到了这个执行者的名字,然后我们给他存到这个命令存储里面,然后我们带上这个命令存储去执行这个函数,对吧?执行这个函数,然后我们把这个函数变成红函数,这样是不是就可以直接带着这个执行者的名字给输出了?我们来试一下, 前面先给他加一个这个美元的符号,然后把这边的 name 给他改一下,给他改成我们传入的这个键的名字啊,键名就是 name。 好, 那这样子改完了以后,大家是不是觉得没什么问题?这个 name 是 这个红传进来的吗?对吧?然后还有一个 number 是 我们 key 这边的名字,没有问题的,对吧?那么来游戏里试试看。 来到游戏里面我们先 re load 一下,然后我们来执行一下打开对话框的这个函数,哎,可以发现我们打开之后发现,哎,这个执行他怎么没有效果,是吧?那我们来单独执行一下这个指令试试,那我们来直接把这条指令复制过去,然后执行一下试试。 好,我们来执行一下,哎,可以发现他缺少参数,因为我们这是个红嘛,然后他缺少这个 number 的 参数,那这个 number 的 参数是哪个呢? 这个 number 参数好像是我们控件这边用来传数字的这个参数,那假如我们在执行这个对话框之前,提前把这个 number 参数传好了,那这个对话框不就不能随着我们这个动态的变化而变化了吗? 就我们发送的时候,是不是就固定发送了这个,我们传进来 number 这个值,然后这个这个动态的执行命令就没有用了,好像是这样的,是吧?这是许多小伙伴会碰到一个问题啊, 那现在我来教大家一下怎么解决啊?我们首先给这个 number 这边这个参数给它改个名字,用来区分一下,就给它改成 key id, key id 就 表示这是我们这个这边 key, 然后 number 这个这个参数用的,然后我们在外边,我们这是一个红的对话框吗?是吧?那我们那我们执行这个函数的时候,是不是要传入这个 name 和这个 key id 这两个值?那么来这边给它提前指定一下,这边 name 已经指定好了, 假设说我们在别的地方已经获出来了这个名字吗?然后我们再指定一个 keyid 就 可以了,我们 keyid 给他指定一个,这个指定是有讲究的,这个指定是有讲究的,我们必须得指定这个 number, 我 们给他先复制一下,给他指定个 number, 然后这里面呢 keyid 给他指定一个美元,然后小括号, 然后在小括号里面输入这个 key 的 名字就是 number, 我 们这边是 number 吗?是吧?那做到这一步,有位小伙伴就已经看懂了,就是我们从外部提前指定好一个参数,然后给他这边指定这一部分给他替换掉。我们来模拟一下,就是他带带入进去会变成什么?首先这个内幕,他带入进去 是不是把我们这边这个内幕给它改掉了?然后我们再带入一个 keyid, 我 们这边这个对话框中是不是还需要一个 keyid 没带进去?那我们看看把这个 keyid 复制一下,复制一下,然后再带进去,带进去把这个 keyid 给它替换掉。 我们粘贴这边,我们名字给它改一下吧。好,粘贴完之后我们整个指令它是不是变成这样了?就是一个玩家的名字,然后 这边后面是一个 number, 那 这个 number 对 应的是哪个呢?就是这边 key 的 这个名字是不是?那这样子我们这个指令补全完之后,他就可以正常使用了,我们先给他退回去,给他退回去, 这样子补全完之后就其实是差不多了,那我们可以给这个前面这个标这个 label 这个名字也给他改一下,就是我们复制一下, 然后给这个 label 也改一下。好,然后我们保存回到游戏这边 reload 一下, 然后我们再来执行一下,打开这个的函数,大家可以发现我们这边这个条这边的名字已经是成功了,并且对话框也成功打开了,我们随便弄一个数字,然后点击发送, 大家可以发现这边的指令就已经变成了正确的指令了,我们也可以成功发送出去的就是我的名字,然后加上对应的数字,是不是?那这个问题就已经解决了,我们可以多弄几个试试看,是吧?就已经解决了。 那总结一下就是我们只需要把 key 需要的那一部分,对吧?这边是需要的那一部分给它传进去就可以了,这个还是比较简单的吧,对吧?好了,那这期视频就到这里了,感谢大家收看我们下期视频,再见,大家拜拜。


今天要讲的是 execute 的 条件子命令, if 和 unless。 if 和 unless, 简单来说就是 if, 如果满足就 unless, 如果不满足就。条件子命令有四个分支, block, blocks 与 block 相似, entity score 先从 entity 说起, inty, 检查一个或多个特定实体是否存在,如 execute s at a, entity at s tag 等于 a run, 意思是如果所有玩家中存在自己带有 a 标签的玩家,则执行后续命令。 这么说可能有点复杂,你可以理解为只要在所有玩家中,只要有一个实体带有 a 标签,则满足条件,测试通过,执行后续指令。其中有六种运行模式 语法是, execute if unless score, 目标选择契记分项预测符,目标选择契记分项。 run 命令, 意思是在所有玩家中,只要有其中一个玩家自己分数位某某范围,则测试通过,满足条件,执行后续命令。这些运算符号可用于对比实际的积分版分数。 举例, execute if score at 一, 积分版一 at 一 积分版二 run, 如果没听懂可以暂停,回去再看一下。接下来是 block, 这个比较简单,就是比较给定的位置的方块是否会给 一定的方块 id, 通俗的讲就是检测一个坐标是否是你指定的方块。衣服如果是,执行后续 unless, 如果不是,则执行后续。我们可能想说这个方块状态是什么意思?在 java 版中可以附加方块状态和 m t 标签,比如箱子里放东西,只有在箱子里的指定格子有指定物品,且物品状态一样才会通过。 接下来是 blocks 比较相同大小的两个长方形区域的方块,这个和 block 类似, block 比较的是单个方块,而 blocks 是 比较相同大小内一个区域内的方块和另一个区域的方块。比较方式有两种,奥和 mask 探测区域内的全部方块, mask 忽略原区域内空气方块所在的位置。现在条件子命令讲解完毕,你听懂了吗?