鼠標移動

From Minecraft Parkour Wiki
Revision as of 11:29, 1 October 2021 by Pjx1314 (talk | contribs) (Created page with "这意味着视角以0.15°的增量移动:如果要转45°,则需要移动鼠标300px。")
Other languages:

鼠標移動表示光標在屏幕上的瞬時位移(以像素為單位): ()。

在《我的世界》中,鼠標移動代表視角的即時旋轉(以角度表示): ()。



靈敏度

靈敏度(s)是一個參數,用於改變視角的旋轉速度。

可以在「控制」菜單中更改此設置。

  • 默認靈敏度為"100%" ()
  • 原版中最低的靈敏度是"0%" ()
  • 原版中最高的靈敏度是"200%" ()


在1.8中, 計算如下:

以同樣的方式獲得,如果打開了「鼠標反轉」,則乘以-1。


在默認靈敏度下(),鼠標移動一個像素轉換為0.15°旋轉。

這意味着視角以0.15°的增量移動:如果要轉45°,則需要移動鼠標300px。


此外,s理論上並不受 [0,1] 的限制,它可以取任何值(甚至是負值)

您可以在 options.txt ( .minecraft 文件夾中)中手動編輯 mouseSensitivity 的值

請注意,服務器上可能允許也可能不允許修改 options.txt 文件。



Remarkable values

由於可以將靈敏度設置為我們想要的任何值,因此調整靈敏度以匹配特定的旋轉增量可能會很有趣。

To get the required sensitivity for the desired increment , we can use the inverse formula:


This table lists remarkable increments of rotation, and the corresponding values of s.

s
-0.3333333
0.1° 0.3946504
0.15° 0.5
0.25° 0.6546926
0.5° 0.9115013
1.2350600
45° 5.2452746
180° 8.5221547

Yaw and Pitch

Yaw (horizontal rotation) and pitch (vertical rotation) are floats that keep track of an entity's head rotation.

Facing is the restriction of the yaw to [-180, 180], as it is represented in F3. Pitch is naturally clamped between [-90, 90].

Mouse movement directly modifies the player's yaw and pitch:
/* In EntityRenderer.java */
public void updateMouseMovement(...)
{
    ... //previous code ignored
</div>

    <div lang="en" dir="ltr" class="mw-content-ltr">
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;
</div>

    <div lang="en" dir="ltr" class="mw-content-ltr">
int i = 1;
    if (this.mc.gameSettings.invertMouse)
        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">
this.mc.thePlayer.rotateEntity(dX, dY*i);
}
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
/* In 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);
}


While the pitch is clamped between -90° and 90°, yaw is not restricted between -180° and 180° as would be expected.

This means that yaw is unbounded, which has some unintended consequences if you deliberately turn in one direction for long enough.


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.

  • When () it can only increase in increments of 0.5°.
  • When () it can only increase in increments of 1°.


This is because the yaw gets too large to be converted to a proper angle (see Angles).

This phenomenon happens when .


Turning even further can crash the game, when