Mouse Movement/zh: Difference between revisions
(Created page with "偏航(水平旋转)和俯仰(垂直旋转)是跟踪实体头部旋转的。[http://zh.wiki.sxisa.org/wiki/%E6%B5%AE%E7%82%B9%E6%95%B0 浮点数]。") |
No edit summary |
||
(20 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
<languages/> |
<languages/> |
||
鼠标移动表示光标在屏幕上的瞬时位移(以像素为单位 |
鼠标移动表示光标在屏幕上的瞬时位移(以像素为单位):(<math display="inline">dx,dy</math>)。 |
||
在《我的世界》中,鼠标移动代表视角的即时旋转 |
在《我的世界》中,鼠标移动代表视角的即时旋转(以角度表示):(<math display="inline">\Delta x , \Delta y</math>)。 |
||
<br /> |
<br /> |
||
<span id="Sensitivity"></span> |
|||
== 灵敏度 == |
== 灵敏度 == |
||
灵敏度 |
灵敏度('''s''')是一个参数,用于改变视角的旋转速度。 |
||
可以在“控制”菜单中更改此设置。 |
可以在“控制”菜单中更改此设置。 |
||
* 默认灵敏度为 |
* 默认灵敏度为“100%”(<math display="inline">s=0.5</math>) |
||
* 原版中最低的灵敏度是 |
* 原版中最低的灵敏度是“0%”(<math display="inline">s=0.0</math>) |
||
* 原版中最高的灵敏度是 |
* 原版中最高的灵敏度是“200%”(<math display="inline">s=1.0</math>) |
||
在1.8中, |
在1.8中,<math display="inline">\Delta x</math> 计算如下: |
||
<math>\Delta x = 1.2dx \times (0.6s + 0.2)^{3}</math> |
<math>\Delta x = 1.2dx \times (0.6s + 0.2)^{3}</math> |
||
Line 26: | Line 27: | ||
在默认灵敏度下 |
在默认灵敏度下(<math display="inline">s=0.5</math>),鼠标移动一个像素转换为 0.15° 旋转。 |
||
这意味着视角以0.15°的增量移动:如果要转45°,则需要移动鼠标300px。 |
这意味着视角以 0.15° 的增量移动:如果要转 45°,则需要移动鼠标 300px。 |
||
此外,'''s'''理论上并不受 [0,1] 的限制,它可以取任何值(甚至是负值) |
此外,'''s''' 理论上并不受 [0,1] 的限制,它可以取任何值(甚至是负值) |
||
您可以在 options. |
您可以在 options.txt(.minecraft 文件夹中)中手动编辑 mouseSensitivity 的值 |
||
请注意,服务器上可能允许也可能不允许修改 options.txt 文件。 |
请注意,服务器上可能允许也可能不允许修改 options.txt 文件。 |
||
Line 41: | Line 42: | ||
<span id="Remarkable_values"></span> |
|||
== 特殊的值 == |
== 特殊的值 == |
||
由于可以将灵敏度设置为我们想要的任何值,因此调整灵敏度以 |
由于可以将灵敏度设置为我们想要的任何值,因此可以调整灵敏度以获得特定的旋转增量。 |
||
为了得到所需增量 |
为了得到所需增量 <math display="inline">\delta</math> 所匹配的灵敏度,我们可以使用逆公式: |
||
<math>s = \frac{\sqrt[3]{\frac{\delta}{1.2}} - 0.2}{0.6}</math> |
<math>s = \frac{\sqrt[3]{\frac{\delta}{1.2}} - 0.2}{0.6}</math> |
||
Line 80: | Line 82: | ||
|}<br /> |
|}<br /> |
||
<span id="Yaw_and_Pitch"></span> |
|||
== 偏航和俯仰 == |
== 偏航和俯仰 == |
||
偏航(水平旋转)和俯仰(垂直旋转)是跟踪实体头部旋转的 |
偏航(水平旋转)和俯仰(垂直旋转)是跟踪实体头部旋转的[http://zh.wiki.sxisa.org/wiki/%E6%B5%AE%E7%82%B9%E6%95%B0 浮点数]。 |
||
⚫ | |||
<div lang="en" dir="ltr" class="mw-content-ltr"> |
|||
⚫ | |||
</div> |
|||
鼠标移动直接修改玩家的偏航和俯仰:<syntaxhighlight lang="java"> |
|||
<div lang="en" dir="ltr" class="mw-content-ltr"> |
|||
⚫ | |||
Mouse movement directly modifies the player's yaw and pitch:<syntaxhighlight lang="java"> |
|||
⚫ | |||
public void updateMouseMovement(...) |
public void updateMouseMovement(...) |
||
{ |
{ |
||
... // |
... //忽略前面的代码 |
||
</div> |
|||
⚫ | |||
<div lang="en" dir="ltr" class="mw-content-ltr"> |
|||
⚫ | |||
float mult = f * f * f * 8.0F; |
float mult = f * f * f * 8.0F; |
||
float dX = (float)this.mc.mouseHelper.deltaX * mult; |
float dX = (float)this.mc.mouseHelper.deltaX * mult; |
||
float dY = (float)this.mc.mouseHelper.deltaY * mult; |
float dY = (float)this.mc.mouseHelper.deltaY * mult; |
||
</div> |
|||
⚫ | |||
<div lang="en" dir="ltr" class="mw-content-ltr"> |
|||
⚫ | |||
if (this.mc.gameSettings.invertMouse) |
if (this.mc.gameSettings.invertMouse) |
||
i = -1; |
i = -1; |
||
</div> |
|||
... //如果为平滑相视角则应用过滤器 |
|||
<div lang="en" dir="ltr" class="mw-content-ltr"> |
|||
... //Applies filters if smooth camera |
|||
</div> |
|||
⚫ | |||
<div lang="en" dir="ltr" class="mw-content-ltr"> |
|||
⚫ | |||
} |
} |
||
</div> |
|||
⚫ | |||
<div lang="en" dir="ltr" class="mw-content-ltr"> |
|||
⚫ | |||
public void rotateEntity(float dX, float dY) |
public void rotateEntity(float dX, float dY) |
||
{ |
{ |
||
Line 128: | Line 118: | ||
} |
} |
||
</syntaxhighlight> |
</syntaxhighlight> |
||
</div> |
|||
虽然俯仰角被限制在 -90° 和 90° 之间,但偏航角并不像预想的那样限制在 -180° 和 180° 之间。 |
|||
<div lang="en" dir="ltr" class="mw-content-ltr"> |
|||
While the pitch is clamped between -90° and 90°, yaw is not restricted between -180° and 180° as would be expected. |
|||
</div> |
|||
这意味着'''偏航是无限的''',如果你故意朝一个方向转动足够长的时间,则会产生一些意想不到的后果。 |
|||
<div lang="en" dir="ltr" class="mw-content-ltr"> |
|||
This means that '''yaw is unbounded''', which has some unintended consequences if you deliberately turn in one direction for long enough. |
|||
</div> |
|||
由于它是一个浮点数,所以它的精度会随着它变大而变差,以至于它在大值时变得明显不稳定。 |
|||
<div lang="en" dir="ltr" class="mw-content-ltr"> |
|||
By nature of being a float, its precision becomes worse the bigger it gets, to the point where it becomes noticeably jittery at large values. |
|||
</div> |
|||
⚫ | |||
<div lang="en" dir="ltr" class="mw-content-ltr"> |
|||
* |
* 当 <math>|yaw| > 8388608</math> (<math display="inline">2^{23}</math>) 它只能以 1° 的增量增加。 |
||
⚫ | |||
</div> |
|||
在某些时候,偏航甚至可以[https://youtu.be/DEI_CeFlatM 扰乱运动并使玩家停止在原地]。 |
|||
<div lang="en" dir="ltr" class="mw-content-ltr"> |
|||
At some point, yaw can even [https://youtu.be/DEI_CeFlatM mess with movement and stop the player in place]. |
|||
</div> |
|||
这是因为偏航太大而无法转换为合适的角度(参见[[Special:MyLanguage/Angles|角度]])。 |
|||
<div lang="en" dir="ltr" class="mw-content-ltr"> |
|||
This is because the yaw gets too large to be converted to a proper angle (see [[Special:MyLanguage/Angles|Angles]]). |
|||
</div> |
|||
⚫ | |||
<div lang="en" dir="ltr" class="mw-content-ltr"> |
|||
⚫ | |||
</div> |
|||
⚫ | |||
<div lang="en" dir="ltr" class="mw-content-ltr"> |
|||
⚫ | |||
</div> |
Latest revision as of 05:28, 16 August 2023
鼠标移动表示光标在屏幕上的瞬时位移(以像素为单位):()。
在《我的世界》中,鼠标移动代表视角的即时旋转(以角度表示):()。
灵敏度
灵敏度(s)是一个参数,用于改变视角的旋转速度。
可以在“控制”菜单中更改此设置。
- 默认灵敏度为“100%”()
- 原版中最低的灵敏度是“0%”()
- 原版中最高的灵敏度是“200%”()
在1.8中, 计算如下:
以同样的方式获得,如果打开了“鼠标反转”,则乘以-1。
在默认灵敏度下(),鼠标移动一个像素转换为 0.15° 旋转。
这意味着视角以 0.15° 的增量移动:如果要转 45°,则需要移动鼠标 300px。
此外,s 理论上并不受 [0,1] 的限制,它可以取任何值(甚至是负值)
您可以在 options.txt(.minecraft 文件夹中)中手动编辑 mouseSensitivity 的值
请注意,服务器上可能允许也可能不允许修改 options.txt 文件。
特殊的值
由于可以将灵敏度设置为我们想要的任何值,因此可以调整灵敏度以获得特定的旋转增量。
为了得到所需增量 所匹配的灵敏度,我们可以使用逆公式:
此表列出了一些特殊的旋转增量,以及 s 的相应值。
s | |
---|---|
0° | -0.3333333 |
0.1° | 0.3946504 |
0.15° | 0.5 |
0.25° | 0.6546926 |
0.5° | 0.9115013 |
1° | 1.2350600 |
45° | 5.2452746 |
180° | 8.5221547 |
偏航和俯仰
偏航(水平旋转)和俯仰(垂直旋转)是跟踪实体头部旋转的浮点数。
转向是将偏航限制在 [-180,180],如F3所示。俯仰角自然夹在 [-90,90] 之间。
鼠标移动直接修改玩家的偏航和俯仰:
/* 在EntityRenderer.java中 */
public void updateMouseMovement(...)
{
... //忽略前面的代码
float f = this.mc.gameSettings.mouseSensitivity * 0.6F + 0.2F;
float mult = f * f * f * 8.0F;
float dX = (float)this.mc.mouseHelper.deltaX * mult;
float dY = (float)this.mc.mouseHelper.deltaY * mult;
int i = 1;
if (this.mc.gameSettings.invertMouse)
i = -1;
... //如果为平滑相视角则应用过滤器
this.mc.thePlayer.rotateEntity(dX, dY*i);
}
/* 在Entity.java中 */
public void rotateEntity(float dX, float dY)
{
this.rotationYaw = this.rotationYaw + dX*0.15);
this.rotationPitch = this.rotationPitch - dY*0.15;
this.rotationPitch = MathHelper.clamp(this.rotationPitch, -90.0, 90.0);
}
虽然俯仰角被限制在 -90° 和 90° 之间,但偏航角并不像预想的那样限制在 -180° 和 180° 之间。
这意味着偏航是无限的,如果你故意朝一个方向转动足够长的时间,则会产生一些意想不到的后果。
由于它是一个浮点数,所以它的精度会随着它变大而变差,以至于它在大值时变得明显不稳定。
- 当 () 它只能以 0.5° 的增量增加。
- 当 () 它只能以 1° 的增量增加。
在某些时候,偏航甚至可以扰乱运动并使玩家停止在原地。
这是因为偏航太大而无法转换为合适的角度(参见角度)。
这种现象发生在 时。
当 时,可能会导致游戏崩溃。