坐标(Coordinate)

坐标为三个数字,定义了物件在当前世界内的位置。该三数值分别为x、y、z数值,分别代表物件在x、y、z轴上离参照点(Reference point)的距离,单位为米,即一般方块的长、宽、高的数值。

  • x轴为东(+)西(-)。
  • y轴为上(+)下(-)。
  • z轴为南(+)北(-)。

本文会以(x, y, z)表达坐标。

绝对坐标(Absolute coordinate)

绝对坐标的参照点为游戏的原点,即(0,0,0)。
一般不特别指明的情况下都为绝对坐标、主世界。
游戏内点击F3后出现的调试界面会显示玩家当前的绝对坐标(注意是脚的坐标)、朝向等资料,对地图制作十分有用。

一般地图内的定位大多用绝对坐标,因为我们清楚所有东西的坐标,使用相对坐标则需要新的参照点并且需要一些计算,比较麻烦。
然而能够在多个地图内使用的模块则甚少使用绝对坐标,因为我们不清楚当前坐标的绝对坐标(命令没法轻易获得此数值,即使能获取也无法将它便捷地用在其他命令中)。在这情况下,我们会以某个实体为参照点,使用相对坐标。

相对坐标(Relative coordinate)

相对坐标就是相对于某个点的坐标。表达相对坐标的符号为~(如~3就是+3,~就是没有变化)。比如(~5 ~ ~-3)就是某个点的(x+5, y, z-3)的位置。
相对坐标可以与绝对坐标一起使用, 比如原点为(5,5,5),坐标(~5 20 ~-3)换为绝对坐标就是(10 20 2)

相对坐标在大部分命令都充当着一个很重要的角色, 因为很多时候我们会希望对目标相对位置进行操作, 比如在玩家上方放置方块。(有时候我们也会使用绝对的Y坐标,因为Y坐标的数值有其独特含义,如64代表的是海平面的高度。相比之下我们X, Z绝对坐标的意义就不大。)

相对坐标的原点=执行点?
(对于执行点的概念请参见章节1.3:命令执行)

在大多数使用相对坐标的情况下,是的。很大部分相对坐标是相对于执行坐标的。
然而有两个例外: tp命令及execute命令。
tp命令的其中一个格式: tp <被传送实体> <x> <y> <z>,中的(x, y, z),原点为被传送实体的当前坐标,而不是执行点。
execute命令的格式: execute <实体> <x1> <y1> <z1> <command>execute <实体> <x1> <y1> <z1> detect <x2> <y2> <z2> <block> <data value|block state> <command>,中的(x1, y1, z1)以选择到的实体的坐标为原点,(x2, y2, z2)以 (x1, y1, z1) 的坐标为原点。
不过,在实际的使用情况上,除非是tpexecute命令,否则都是相对于执行坐标了。

方块坐标(Block coordinate)

我们常见的坐标是精确的,可以出现小数的。然而,对于方块我们并不需要那么精确,只需要到整数便可。
这便是方块坐标了。

方块坐标换为普通的坐标就是每个数值+0.5。
如(1, 2, 3)的普通坐标就是(1.5, 2.5, 3.5)。

部分命令会把坐标视为方块坐标(如果没有填写小数的话),如tp命令。

普通坐标的整数就是方块之间的边界。

输入命令的坐标参数时,按tab就可以补全指针指着的方块的相应坐标(看你现在输入的是x, y还是z),令输入fillclone等命令变得更加方便。(起码你不用烦着计算坐标)

世界

坐标体系不包括世界的参数,也就是说,我们没法在主世界里指定地狱里的东西,没法在地狱里指定主世界的东西等(不通过execute命令的话)。

tp等命令也没法做到跨世界的传送。故此处理跨世界的问题时需要小心。

一般我们说的坐标都是说主世界,很少说别的世界的。

朝向(Facing)

Minecraft里的朝向都是以角度为单位。可以填写负数角度。
朝向分为两个: rx, ry。

rx即平面上的转轴,垂直于当前玩家的朝向。也就是说这角度决定了玩家看向上、看向前还是看向下的。
-90就是向上,0就是看向正前方,90就是向下。

ry即垂直的转轴,这决定了平面的朝向。这比较难以描述,还是直接上图就好。

值得一提的是,MC无法直接取得面向的前方的坐标,如果要做到这功能的话只能靠一些黑科技或枚举(穷举,enumerating)

区块(Chunk)

区块是Minecraft世界的组成部分。每个区块的大小为16*256*16,长16格,宽16格,高256格(y=0到y=255)。
当你所在坐标(普通坐标)的 x或z mod16=0(mod为取余),你就是在区块的边缘上了。
方块的话。如果方块任意一个坐标数值 mod16= 0 或 15,就是贴近着区块边缘。
除了这个方法以外, 你还可以按下F3 + G, 这会显示区块边缘, 再按一次F3 + G就能关闭。

出生区块(Spawn chunk)

出生区块在服务器/游戏运行时会被加载。如果某区块的中心距离世界出生点距离(任意一条轴的距离,不是实际距离)小于等于128格,那么它就会被加载。所以一般加载范围是16*16个区块,也有可能是17*17(如果出生点刚好在区块中心)
可以通过/setworldspawn指令来更改世界出生点,以更改出生区块。然而需要知道的是,那个出生区块更改出生区块后需要玩家经过至少一次才会开始加载。

区块加载、卸载(load, unload)

除了出生区块以外,预设玩家附近21*21的区块会被加载(10个区块的内圆半径),然而这可以调整,内圆半径可以从3(附近7*7的区块会被加载)到15(附近31*31的区块会被加载)。其他世界的区块在没有玩家存在时是不会被加载的。

当区块不被加载,就不能通过命令直接在那个区块放置方块,同时那个区块的一切都处于暂停的状态,区块中的实体也会被视作不存在,直至该区块被加载(tp到那里的实体会等待一段时间才会被卸载)。

当区块不符合加载的条件,它会等一段时间之后才会不被加载(卸载),而不是即时的。这时间也不是固定的,大概是几十秒左右,所以一段时间就需要用特殊的方法来加载区块一次来避免它里面的东西不能正常使用。

常用区块加载方法

  • spreadplayers命令
    当需要加载目的区块的时候就向该区块中的一个坐标spreadplayer,这样便可以把目的区块加载一段短时间。
    这也是最常用的方法,因为这个并不需要先前让那个区块被加载才能使用,而且是最有弹性的,不会被坐标什么的局限。
    然而如果需要长时间加载区块,那么就不建议使用这个,因为可能会不稳定。(无论任何情况也不建议需要长久加载非出生区块的区块)
    这个方法不需要得知目的地的绝对坐标, 然而目的地必须有方块让传送的实体到达, 不然就会因为spreadplayer无法完成实体扩散而失败。
  • 结构方块
    结构方块放置结构时会短暂加载目标区块一段时间,只需要弄一个非常大的结构文件放置一大堆空气,然后放置到目标区块,但设置"结构完整性"(integrity)为0.0,这样就不会放置任何方块,但也会加载目标区块。
    问题是这个方式需要在加载中的区块使用(因为不能在被卸下的区块放置方块),与目标区域之间的距离难以确定,因此不常使用。

results matching ""

    No results matching ""