【问题标题】:Minecraft modding change direction of player gradually我的世界模组逐渐改变玩家的方向
【发布时间】:2016-10-21 11:24:09
【问题描述】:

对于一个 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 语句的这段代码可以正常工作。 yaw 和 pitch 变量以度为单位。

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

【问题讨论】:

  • 你想从玩家当前看的任何方向旋转吗?您要查看的位置是世界上的某个位置还是相对于您的玩家? player.rotationYaw 是度数还是弧度?
  • @ManIkWeet rotationYaw 以度为单位,我确定。
  • @ManIkWeet 以度为单位
  • @JustAJavaCoder 您是否尝试将rotationYaw 限制为-180 180?我不明白您对 the screen suddenly does a 360° turn, for no apparent reason. 的意思,因为这不会明显改变您屏幕上的任何内容...

标签: java minecraft direction


【解决方案1】:

这是一个常见问题。或者更确切地说,人们普遍存在的问题是他们想做“跨越时间的事情”,却不知道如何让它“跨越时间”。

您需要lerp 相机一小段距离每个刻度,直到达到所需的方向。您需要:

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

b) 在您的代码已经使用的任何方法中(注意:此代码必须已经被调用一次)并在那里执行 lerping。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多