以正南(z轴正方向)为0°,顺时针旋转180°通过正西至正北,用正数,逆时针旋转180°通过正东至正北,用负数。比如-45°,就代表以正南为基准,逆时针旋转45°的方向;30°,就代表以正南为基准,顺时针旋转30°的方向。
也就是说,在Minecraft中,水平旋转角度的正确范围是-180°~180°,而不是0°~360°。至于为什么我要在第九章那么讲,只是怕一下子就把负数搬出来会吓你们一跳。』
现在,我们要纠正这里的一个疏漏之处:在Minecraft中,水平旋转角度其实有两套标准——一个就是我们在第九章讲到的『真南方位角』,也就是0°~360°这个标准;另外一个就是第二十六章讲到的-180~180°这套标准。
你可能已经有些晕了——两套标准,怎么判断什么时候要用什么标准?
其实很简单,我们只需要记住三个关键点就行:
①在目标选择器中,必须采用『-180~180°』这套标准。
②在指令中,除了目标选择器和NBT外,其他地方基本上两个标准都能用。
③在实体NBT中,玩家采用的是『-180~180°』这套标准,而非玩家实体采用的是类似『真南方位角』的0°~360°标准。
这章没有结束,请点击下一页继续阅读!
其中的第三点,这边得好好讲一下。回去看看上面那个Rotation标签,你会发现那里采用的是『真南方位角』的标准,这说明了什么?
这说明,这个实体,不是一个玩家。
没错,上面那个Rotation标签,是作者从Java1.12.2版本中的一只猪上扒下来的。(不用担心,即使在目前最新的Java1.19.1版本中,这个特性也没有被Mojang改变)
那玩家的呢?让我们使用/data指令获取一下:
/data get entity @s Rotation
\\适用于Java1.13及以上版本\\
data指令本书还没讲到,如果你感兴趣的话可以去Minecraft Wiki上了解了解。在这边你只需要知道,上面那条指令可以获取到你自己(执行者)的Rotation标签数据。
运行一下,游戏返回了以下数据:
→XXXXXX拥有以下实体数据:[-71.f,29.f]
不难注意到,上面的数据中,水平旋转角度是『-71.f』,采用的是与非玩家实体不一样的标准。
So,你学会了吗?Rotation标签就这样子,如果能的话你可以探究一下把实体的水平旋转角度设成负数会发生什么。接下来让我们继续了解更多的实体NBT标签。
实体肯定能够运动,因此必然具有速度属性。那游戏是怎样存储实体速度的呢?
我们在小学二年级就学过:一个物体的速度,可以被分解为该物体在X、Y、Z三个轴上的速度。Minecraft中存储实体速度的方式就和这差不多。在实体NBT中,用来存储实体速度的标签是Motion标签,它的数据类型是『Double双精度浮点数列表』,列表内的三个元素从左到右分别是该实体在X、Y、Z三个轴上的速度向量,单位是『米/秒』。举个简单的例子:
{Motion:[1.d,-0.75d,0.0d]}
这代表着该实体正朝着正东、水平向下约30°的方向以约1.5米每秒的速度前进。需要注意的是,Motion的值并不会固定不变,而是会受到游戏模拟的阻力的影响。
(注:0.75倍根号3就约为1.,因此你可以把1.看作0.75√3)
由于本书并不是一个物理教材,所以关于Motion我们就不继续深入,你大概知道是这么一回事就行。如果你没有看懂,可以去求助你的物理老师。