Minecraft 模组逐渐改变玩家的方向

Minecraft modding change direction of player gradually

对于一个 Minecraft 项目,我想让玩家逐渐面对 (0, 60, 0)。到目前为止,当玩家围绕 (0, 60, 0) 移动超过 720° 时,我尝试的一切似乎都失败了。

有人知道如何让相机无缝移动到 (0, 60, 0) 吗?

谢谢!

到目前为止,这是我的代码(切换时循环运行):

int x = 0;
int y = 60;
int z = 0;
        
player = Minecraft.getMinecraft().thePlayer;
        
double dirx = player.posX - 0;
double diry = player.posY - 60;
double dirz = player.posZ - 0;

double len = Math.sqrt(dirx*dirx + diry*diry + dirz*dirz);

dirx /= len;
diry /= len;
dirz /= len;

double pitch = Math.asin(diry);
double yaw = Math.atan2(dirz, dirx);

//to degree
pitch = pitch * 180.0 / Math.PI;
yaw = yaw * 180.0 / Math.PI;

yaw += 90f;
   
if(yaw > player.rotationYaw) {
    player.rotationYaw++;
} else if(yaw < player.rotationYaw) {
    player.rotationYaw--;
}

这段没有 if 语句的代码可以正常工作。偏航和俯仰变量以度为单位。

我遇到的问题是,每当我在 (0, 60, 0) 上转几次,屏幕突然无缘无故地转了 360°。

这是一个常见问题。或者更确切地说,人们普遍存在的问题是他们想做 "something across time" 但不知道如何去做 "across time."

您需要 lerp 相机 每次 tick 一小段距离,直到达到所需的方向。您要么需要:

a) 创建一个事件处理程序并订阅其中一个 TickEvents(选择一个合适的事件,然后确保选择一个阶段,Phase.START 或 Phase.END,否则您的代码将运行 一帧多次)。

b) 无论你的代码已经在什么方法中(注意:这个代码必须已经被调用一次)然后在那里做 lerping。

不知道如何计算 lerp? Stack Overflow already has that answered.