循环
如果读者曾经学过编程,相信也知道循环对程序是多么重要的了。
通过循环,我们可以为每个实体执行动作,或是执行一些动作到某个条件不成立等等。
这里说的循环是1gt内的循环。我们会使用命令函数。
Foreach——对每个实体循环
对于单一命令,我们可以很简单的使用execute
命令。因为execute就是让每个实体执行的,而执行顺序是根据选择器选择玩家的顺序。
不过如果我们需要执行多条命令呢?我们可以使用命令函数和execute
命令。
例子
把每个marker(id分数都不同)传送到id分数相同的玩家身上。
首先我们先写一下每个marker应该执行的命令
# tp:match
# 首先检查分数
scoreboard players operation @a id -= @s id
# tp过去0分的玩家那里
# 使用@p是因为你根本不可能tp到一个死人那里...所以就没差了
tp @s @p[score_id_min=0,score_id=0]
# 重置分数
scoreboard players operation @a id += @s id
然后我们可以直接execute所有marker执行这条命令
execute @e[name=marker] ~ ~ ~ function tp:match
就是这样,超级简单的说,不过基本上不用function就无法做到了。
While——当条件成立就一直循环
有时候我们需要循环到某个条件成立/不成立,这时候我们就需要while了。
while简单来说就是当某个条件成立,就一直循环某些命令,直至条件不成立。
我们在命令函数里会使用尾递归的方式,类似函数编程。
例子
生成n个marker。我们把条件设置为
当count >= 1的时候就不停生成marker,每次count -1,直至count < 1 (count = 0)
# util:summon_while
scoreboard players remove @s count 1
summon armor_stand ~ ~ ~ {CustomName:marker}
function util:summon_while if @s[score_count_min=1]
比如说我们要生成两个marker,我们会执行:
scoreboard players set @s count 2
function util:summon_while
第一次调用那命令函数的时候,count会-1,变为1。
由于count >= 1,因此会第二次调用那命令函数
第二次调用的时候,count会-1,变为0。
由于count < 1,因此不会再调用自己,循环停止。