进阶 - 距离(r)选择器

距离选择器概述

在Minecraft基岩版中,距离选择器(r参数)用于根据实体与命令执行点之间的距离来选择实体。这是制作精密指令系统和地图时非常重要的功能。

基本概念

距离选择器使用 r=值rm=值 来筛选特定距离范围内的实体,让指令只在特定区域内生效。

基本语法

距离选择器的基本格式:

@e[r=10]      // 选择距离10格以内的所有实体
@e[r=5,rm=10] // 选择距离5到10格之间的所有实体
@a[rm=15]     // 选择距离15格以外的所有玩家

重要提示

距离是从命令执行的位置开始计算的。在命令方块中执行时,距离是从命令方块的位置计算。

范围选择 - r参数

使用 r=值 选择指定距离内的实体:

示例

@a[r=5] - 选择5格范围内的所有玩家

@e[r=10] - 选择10格范围内的所有实体

@e[type=cow,r=15] - 选择15格范围内的所有牛

精确距离 - rm参数

使用 rm=值 选择指定最小距离外的实体:

示例

@a[rm=10] - 选择10格范围外的所有玩家

@e[rm=5] - 选择5格范围外的所有实体

组合使用r和rm参数

可以同时使用 rrm 参数来选择一个距离范围:

示例

@a[r=10,rm=5] - 选择5到10格范围内的玩家

@e[type=zombie,r=15,rm=8] - 选择8到15格范围内的僵尸

@e[r=20,rm=10] - 选择10到20格范围内的所有实体

注意

在使用范围选择时,rm 值必须小于 r 值,否则将无法选择到任何实体。

实际应用示例

1. 区域效果应用

# 给5格范围内的玩家速度效果
/effect @a[r=5] speed 30 1

# 给10-20格范围内的玩家挖掘疲劳
/effect @a[r=20,rm=10] mining_fatigue 30 1

2. 区域传送

# 将15格范围内的玩家传送到指定位置
/tp @a[r=15] 100 64 100

# 将5-10格范围内的实体传送到上空
/tp @e[r=10,rm=5] ~ ~5 ~

3. 区域检测与触发

# 检测是否有玩家进入10格范围内
/execute @a[r=10] ~~~ say 有玩家靠近!

# 当玩家进入5格范围内时给予物品
/execute @a[r=5] ~~~ give @s diamond 1

# 清除15格范围内的物品
/kill @e[type=item,r=15]

4. 结合其他选择器参数

距离选择器可以与其他选择器参数组合使用:

# 选择10格范围内有"vip"标签的玩家
@a[tag=vip,r=10]

# 选择5-15格范围内的牛,并排除有"farm"标签的
@e[type=cow,r=15,rm=5,tag=!farm]

# 选择20格范围内随机一个玩家
@r[r=20]

5. 高级区域系统

# 多层区域检测系统
/execute @a[r=5] ~~~ tag @s add in_core_area
/execute @a[r=15,rm=5] ~~~ tag @s add in_mid_area
/execute @a[rm=15] ~~~ tag @s add in_outer_area

# 根据不同区域给予不同效果
/effect @a[tag=in_core_area] regeneration 10 1
/effect @a[tag=in_mid_area] jump_boost 10 1
/effect @a[tag=in_outer_area] slow_falling 10 1

# 清除区域标签
/tag @a remove in_core_area
/tag @a remove in_mid_area
/tag @a remove in_outer_area

性能优化提示

在使用距离选择器时,尽量缩小选择范围以提高游戏性能。特别是在高频命令方块中,避免使用过大范围的 @e 选择器。