第一中文网

第七十四章 探究:execute的运行流程 (第2/6页)

天才一秒记住【第一中文网】地址:www.dyzww.cc

------------↓-------↓-------↓---|----↓------↓-------↓---|----↓-------↓-------↓

-----------1------2------3---|---4-----5------6---|---7------8------9

1:\/tp 玩家名 2 3 2

2:\/tp 玩家名 3 3 3

3:\/tp 玩家名 4 3 4

4:\/tp 村民UUId 2 3 2

5:\/tp 村民UUId 3 3 3

6:\/tp 村民UUId 4 3 4

7:\/tp 羊UUId 2 3 2

8:\/tp 羊UUId 3 3 3

9:\/tp 羊UUId 4 3 4

接下来游戏会解析run tp @s ~~1 ~,根据三要素,将其中的目标选择器和相对坐标等参数具体化(但计分板分数之类的不会具体化,因为没必要),得到具体的指令(如上)。

最后,游戏运行具体的指令,也就是本章最开头的那九个过程。

其中,最重要的,也是最关键的一点,就在于execute指令解析at @e的过程。

execute并不是说运行一次解析一次,而是先全部解析了再运行,所以并不会使得『村民传到玩家传送过后上方1米的位置』之类的事情发生。

能理解吧?

那问题来了,如果execute再套一个execute会发生什么?比如我们将上述指令写成:

\/execute as @e run execute at @e run tp @s ~~1 ~

其实效果还是一样的,具体原因就等你自己去推导吧,按照我上面的流程去推导。

这就是Java execute 1.13+版本的运行流程。如果你还不懂,我们再看一个简单并且效果比较明显的例子。

设有盔甲架A和b,分别位于主世界的(40,-60,29)和(42,-60,29)。盔甲架A的生成时间比盔甲架b更早,已加载区块中没有其他盔甲架。在盔甲架A、b旁运行如下指令:

\/execute as @e[type=minecraft:armor_stand] at @s run tp @e[type=minecraft:armor_stand,distance=1..3]~~10 ~

让我们分析一下,运行上述指令会发生什么。

首先,如果我们按照正常的思维去分析这条指令,就会得到以下结果:

A会先将b传送到自己上方10米的位置,b由于处于那个位置无法选取到A来传送,最终仅仅b会被传送到A的上方10米处。

但其实,如果你真的去运行这条指令,就会发现A和b都会被传送到对方原位置的上方10米处。

为什么?我们按照游戏的思维分析一下就可以了:

execute---A---------b

游戏先解析as @e[type=minecraft:armor_stand],得到了上面的两个目标:盔甲架A和盔甲架b。

execute---A--------------b

------------↓--------------↓

-------40·-60·29-----42·-60·29

本章未完,请点击下一章继续阅读!若浏览器显示没有新章节了,请尝试点击右上角↗️或右下角↘️的菜单,退出阅读模式即可,谢谢!

如遇章节错误,请点击报错(无需登陆)

新书推荐

都市超品仙医 活在两个世界 大秦:这个太子总想着造反 与其说瞎话不如 穿越万界:神功自动满级 诛神乾坤 多子多福,仙女都被他抢了怎么办