天才一秒记住【第一中文网】地址:www.dyzww.cc
然后游戏会解析at @s,预先将实体的位置记录下来。
execute---A--------------b
------------↓--------------↓
-------40·-60·29-----42·-60·29
------------↓--------------↓
-----------1-------------2
1:\/tp 盔甲架b的UUId 40 -50 29
2:\/tp 盔甲架A的UUId 42 -50 29
接下来游戏会解析run tp @e[type=minecraft:armor_stand,distance=1..3]~~10 ~,根据三要素,具体化指令,得到具体的指令。由于此时还未传送,所以目标选择器会分别选择到『盔甲架A』和『盔甲架b』。
最后,游戏按照顺序执行指令,分别将盔甲架A和盔甲架b传送到对方上面10米高的位置。
这个例子比较简单,你应该能够理解吧?
所以你明白了吗?
上面讲的是Java1.13更新后的execute指令其运行的具体流程,那么Java1.13更新前的呢?以及基岩版的呢?
2016年6月22日,mcbbS大佬pca006132在『矿工茶馆』发布了一个猜猜乐(Id:),大致的问题如下:
execute @e ~~~... summon ArmorStand,这个指令在初始实体不同数目的时候出来的结果是什么
没想到竟然没人能够解答这个问题,于是这位大佬在次日讲解了这个问题(帖子Id:)。他举了一个简单的例子:
当初始实体数为2时,运行execute @e ~~~ execute @e ~~~ summon Armorstand
这个例子的结果竟然是8。
那如果在相同的初始情况下,运行execute @e ~~~ execute @e ~~~ execute @e ~~~ summon Armorstand,即套了三个execute的指令会发生什么?
答案是:2048。
很令人震惊啊!那为什么会这样呢?
如果我们在Java1.13及以上版本,运行类似的指令,将达不到一样的效果,因为在Java1.13之前,execute的运行逻辑是完全不一样的。
那么到底是个怎么个逻辑法呢?其实在Java1.13前,execute并不会在运行前先存好各种数据,而是运行一遍解析一遍。以上面那个嵌套了3层execute的指令为例子,我们来解析一下。
条件:初始两个实体A(1,2,1)和b(2,2,2),A比b离执行地点更近。
execute---A----------b
------------↓
----------1·2·1
游戏先解析第一个『execute @e ~~~』,得到了上面的结果。后面我们将会忽略执行地点,因为这边不需要考虑执行地点的影响。
execute---A----------b
------------↓
---------A——b
游戏按照顺序,先以A为执行者运行指令,并解析了第二个『execute @e ~~~』,得到了上面的结果。
本章未完,请点击下一章继续阅读!若浏览器显示没有新章节了,请尝试点击右上角↗️或右下角↘️的菜单,退出阅读模式即可,谢谢!