命令教程“真”从零开始 (二) 命令tp与相对,局部坐标
声明:
1. 默认所有读者看过本系列的第一帖。 作者不对可能出现的方言或术语负责。
2. 本系列全部教程适用于当前Java最新版(1.19.3),但本帖包含的内容在1.13~1.19的版本中全部适用。
3. 本教程默认读者有关于Minecraft的基础知识。
<<<<<< 返回系列目录 ←←
好,各位。欢迎来到该系列第二帖。今天我们要来讲的,是/tp 啊不,应该说,是/teleport指令。原本的指令tp在1.13扁平化时更改为了teleport。但tp仍作为teleport的简写适用。(当然,能用tp谁打那老长的teleport)好吧好吧,我知道你应该会这个指令,但如果你不知道相对坐标,局部坐标,还有“朝向锚”这个名字挺唬人但实际上很简单的东西的话——来。看下去吧。
(就算你都知道,也可以满足自己的阅读癖不是)
这是今天的大纲:
2.1 tp指令
来,让我们开始今天的内容。
/tp指令 ,为指令 /teleport 的简写,是我的世界中的 传送指令 。
它可以将一个或多个玩家或实体传送至一个确定的位置,并可以设定 旋转 。
这将是我以后介绍任何一条命令的方式:先给格式:
- /teleport <目标> <目的地>
- /tp <目标> <目的地>
好,首先,让我们看向下面这个例子:
假设,我(Dahesor)被困在了一座基岩监 & 狱里。我呢,想要逃出去,所以拉来了MysticNebula70
(又是这位老哥(MCWiki巡查员之一) 2022:现在是管理 )。
那么,我该如何传送到他身边呢?
只需要将目标替换为我,将目的地替换为他就好了:
- /tp Dahesor MysticNebula70
- /tp @a Dahesor
但是这条指令可不能反过来写:
/tp Dahesor @a
因为@a为所有玩家——Dahesor不会分身,不可能将他传送至“所有玩家”
也就是说:
不过这时,我们有了一个新的问题:
我在我的自我介绍里说过,我这个人很喜欢玩RPG与CTM地图......也经常被困在一些奇怪的地方,我不能总找人家帮忙吧。
我的意思是,如何传送至一个没有其他玩家的地方?
这个问题实际在问: 如何使用另一种方式来指定一个“目的地” 。
嘛,这里我们就要用到一点数学了。
2.2 坐标
我默认你学过直角坐标系......毕竟这里是讲指令的,不是讲数学的。
你不懂的话请百度
答案很简单,使用 坐标(coordinates) 。
三维坐标,从世界原点出发,可以使用三个数字表示任何一个位置。
你只需要将“<目的地>” 替换为x,y,z 就好了:
- /tp <目标> <x> <y> <z>
(指令格式,简化版2)
不难理解——
- /tp Dahesor 0 0 0
(然而实际上不是!因为
当你在聊天框中输入指令时,你可以省略<目标>,这时目标会默认为你自己:
- /tp 0 0 0
2.3 查看 坐标
那么,现在的问题就是,如何得知一个位置的坐标?
答案是,使用Debug屏。
现在,有游戏中,按下F3,你会看到下方的一大堆密密麻麻的数据:
(拥有FnLock的请按fn+F3)
嗯,无视那些跳动的复杂数据,只看我红色方框里的那一行:
- XYZ: -287.453 / 5.00000 / -391.455
这个数值可以精确到小数点后5位。一般来说用不到这么精确,所以请看向那个橙色的方框。里面有取整后的数值:
- Block: -288 5 -392
- /tp @a -288 5 -392
注意,玩家有两个方格高,而这个坐标是你脚的位置——系统使用你的下半部分计算坐标。这点很重要,一会会用到。
当然,不是所有的位置都是方便你站上去看坐标的。
——这时,你就可以使用绿色方框里的内容了:
- Targeted Block: -288 4 -394
而液体的坐标则是下面绿色方格里的内容:
- Targeted Fluid: -288 4 -393
以上就是你在Java版中查看坐标的方法。
2.4 相对坐标
让我们看向一个问题。
如何将玩家传送至他的头上两格处?无论他在哪里?
假设,我现在位于世界的中心点(0,0,0),这个问题很好解决——/tp Dahesor 0 2 0 嘛。
但如果你把我放出去乱跑呢?如果你不知道我的坐标呢?
怎么办?
你需要用到的,叫做 相对坐标(Relative Coordinates) 。
相对坐标使用“ ~ ”作为标识符,他会将 坐标原点 更改为 执行者 所在的 位置 。
所以,当你在 聊天框中 输入:
- /tp @s ~ ~ ~
而在 聊天框中 输入:
- /tp @s ~ ~2 ~
在 聊天框中 输入:
- /tp @s ~10 ~ ~
在 聊天框中 输入:
- /tp @s ~ ~ ~-5
相对坐标也可以和正常坐标一起用:
在 聊天框中 输入:
- /tp @s 100 ~10 100
会将你传送到xz(100,100)的位置,并向上传送10格。
懂了吧。
2.5 执行者
注:在本帖的说明中不区分执行者与执行地。这点会在之后补充。
你可能注意到,上方所有的“ 在聊天框中 ”都被 粗体 了。
我在强调这一点。
为什么?难道说这条指令放进命令方块没有用吗?
比如,使用命令方块执行/tp @p ~ ~2 ~ 难道不会将你传送到自己头上两格么?
是的,没用。
不过在那之前,让我们一条一条来。
前面说过,在 聊天框中 输入/tp @s 0 0 0会将你传送至世界中心。
但这条命令在命令方块里没有用。
为什么?
还记得么,选择器@s的含义是,选择 执行者 。
当 使用命令方块执行 这条指令时, 执行者不再是你,而是命令方块!
你在尝试把 命令方块 传送到世界中心——命令方块是个方块,不会动,你的指令自然就失败了。
你要输入的是/tp @p 0 0 0
这是有用的,因为选择器@p是指最近的 玩家 ——有效
好,有了这点铺垫,让我们往下看:
现在,尝试在聊天框中输入:
/tp @a ~ ~2 ~
你认为,我懂,相对坐标嘛,你刚讲过。
所以这条指令是将所有玩家(@a)传送至各自头上两格喽!
错。
所有玩家都会被传送到 你的头上 , 而非它们各自的头上 ——因为 执行者 是 你 ,而我们刚说过: “相对坐标会将坐标原点更改为 执行者 所在的位置。”
执行这是 你 ,~ ~2 ~ 是 你头上两格 ,所以所有玩家都跑这来了。
有了这更多的铺垫,回到我们的问题:
使用 命令方块 执行/tp @p ~ ~2 ~ 会将你传送到 自己头上 两格么?
不会。
因为在此情况中, 执行者 是 命令方块 , 坐标原点 在 命令方块 ,你,会被传送到 命令方块上方两格 !
懂了吧。
执行者是MC命令的核心之一。
你可能会问,“那,该如何使用命令方块将玩家传送到他们头上两格呢?”
这......就要拜托 “指令师的噩梦” /execute 了。指令execute预计讲到要十几帖开外了—— 在那之前,你会多次看到这句话。 (江'湖上到处都有爷的传'说~) 现在不讲,额,如果你想知道,可以自行查找。
2.6 局部坐标
在前面的大纲中,你应该看到了 局部坐标(local coordinates) 这个东西。
这是什么呢?
额......这是一种比相对坐标还要"自由"的东西。
相对坐标使你更改了坐标原点,而局部坐标连你的 维度轴延伸的方向 都改了。
与相对坐标的“ ~ ”相似,局部坐标使用“ ^ ”标识,他会将坐标原点更改为执行者处, 并将“x,y,z”更改为“视线左侧,视线上方,以及视线前方”
什么意思?
字面意思
/tp @p ^ ^ ^ 与 /tp ~ ~ ~ 是一样的—— 都让你原地tp ,但接下来,就是一些不同的地方了。
- /tp @p ~ ~ ~10
在聊天框中输入这条指令会让你向正z轴,也就是南方传送10格。
但这条指令:
- /tp @p ^ ^ ^10
不,
“x,y,z”更改为“视线左侧,视线上方,以及视线前方。”
z轴 被更改为 视线前方
你会 向前 传送十格。
准确地说:向你 准星对准的方向 传送十格。
如果你正面向东,你就会向东传送十格。
如果你正面向南,你就会向南传送十格。
如果你正在仰头看星星,你就会往天上蹿十格。
如果你正在看自己的脚,你就会往地里钻十格。
即使你面向一个奇奇怪怪的角度——比如说什么东偏北23度,仰角50度——你也会向这个方向前进十格。
同理,
- /tp @p ^10 ^ ^
- /tp @p ^ ^10 ^
但.....局部坐标就不能和前两种坐标一起用了——原因?
加油你能想明白的QAQ
我觉得自己解释的够清楚了。
提醒: 局部坐标与相对坐标一样,遵守执行者的规则。
实际上,只要不是世界指令都会受执行者影响。
2.7 旋转
我们已经讲了很多东西了......但还没完呢。
tp指令除了可以传送外,还可以设置 旋转(rotations) 。
格式:
- /tp <目标> <目的地> [<水平旋转>] [<竖直旋转>]
“[]”代表不必须的元素。如果你不填旋转,会维持原有方向。
<水平旋转> 即为你面向的方向,填0时面向正南,负值是向左转,正值时向右转。
正北方为-180.0,正东为-90.0,正南为0.0,正西为90.0,正北以西为179.9,之后回到-180.0
90为看天,-90为看地,0为平视
举例:
- /tp @s 0 0 0 -45 0
会将玩家传送到世界中心,面向东南,无仰角。
这样。
但上面这点其实不是设置“ 旋转 ”,而是设置“ 朝向 ”
想要 旋转 ,你需要使用 相对旋转(Raletive Rotations)
和相对坐标一样,使用 “~” 作为标识:
- /tp @s 0 0 0 ~-30 ~20
这样。
2.8 面向坐标
现在,让我们看向下面这个问题:
如何在不清楚玩家坐标时让玩家面向一个确定的地点?
比如说,你做了一个RPG,在剧情中,要求所有玩家看向BOSS炸开山出现的位置。
但你的竞技场很大,没有确定的方向——玩家有可能在任何一个位置。
这时,你要用的就是“ facing ”了。
在facing后打上另一个坐标,会迫使玩家看向这个位置:
- /tp <目标> <目的地> facing <看向的x> <看向的y> <看向的z>
比如:
- /tp @a 0 0 0 facing 0 100 0
会将所有玩家传送到世界中心,并看向0 100 0的位置——也就是他们头顶。
简单吧
2.9 看向实体
现在,还是在你做的那个RPG地图里——你现在,想强迫玩家看向一个NPC,怎么办?
你要使用的是“ facing entity ”。
在“facing entity”后填入目标,可以迫使玩家看向另一个实体:
- /tp <目标> <目的地> facing entity <看向的目标> [朝向锚]
比如:
- /tp Dahesor 0 0 0 facing entity MysticNebula70
会将我传送至世界中心,并看向MysticNebula70。
嗯,你可能发现,上面的格式中有一个奇怪的东西—— 朝向锚(FacingAnchor)
这是什么意思呢?
很简单,意思就是,你是要看向目标的眼睛,还是脚?
专业点:你是要看向目标的眼睛,还是坐标?
你可以在朝向锚处填写“eyes”或"feet":
- /tp Dahesor 0 0 0 facing entity MysticNebula70 eyes
- /tp Dahesor 0 0 0 facing entity MysticNebula70 feet
当你输入脚时,你反而会看向他的眼睛,而你输入眼睛时......你会看 向 他的头顶。
你的视线总会比预期的高一点。
为什么?
因为,这个朝向是由你的脚计算的,因为那里是你的坐标!还记得之前说的么?
玩家有两个方格高,你的坐标是你脚的位置——系统使用你的下半部分计算坐标。
我放张图,你就理解了:
注意!你只能朝向单个实体!所以像@a@e是不能用的。
也不是没有办法。这点会在 第五帖“tag与进阶选择器” 里说——等你看到再说吧。
2.10 跨维度传送
最后的最后——跨维度传送
我知道你一定很期待这里——但抱歉,想要跨维度传送,单独用tp是不够的。你需要使用 execute 。精确点, execute in
嗯,我说过了——
指令execute预计讲到要十几帖开外了—— 在那之前,你会多次看到这句话。
但.....execute in这部分并不是很难,所以,我要锻炼一下各位查资料的能力——去吧,自己找找怎么用——Mcbbs上有,MCWiki上虽然说的不明不白,但对execute in的解释还是很清楚的,甚至自己开游戏试一下都可以。
还拜托各位知道的不要透露......感谢!(调皮)
以上就是今天的全部内容了。
——我以为相较第一帖能轻松一些的说.....
但还是在两天内完成了。
额......这两天要去收拾一些烂摊子(纯粹的运气不好,你可以想象一下我说这句话的有气无力......但各位连我是女是男都不知道,也无从想象就是啦)
所以下一帖要三天后了。
但下一帖的内容比较简单,所以中和一下也不会晚太久。
上次写到一多半状态下降,所以这次我中途休息了一个小时。
点个收藏吧各位......发下一帖会给个提醒的。
哈~话说原来北京时间已经中午了吗......要补个觉啦。
以上
#更新日志
Java 1.16.5/a 页面发布
Java 1.16.5/b 根据 Wiki命令:语法 ,更改了命令语法
Java 1.16.5/c 增加了有关执行者的说明。同时更改了在旋转上的错误信息。
Java 1.17/a 1.17版本升级完成
Java 1.19.3/a 1.19升级完成
上一篇: [命令] 命令教程“真”从零开始 (一) 指令本身,选择器,与命令方块
索引:系列《命令教程“真”从零开始》
下一篇: [命令] 四个新手指令 命令教程“真”从零开始 (三)
