当前位置: 首页 > 知识库问答 >
问题:

Minecraft modding会逐渐改变玩家的方向

宣弘新
2023-03-14

对于一个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°旋转,这是没有明显原因的。

共有1个答案

许高峻
2023-03-14

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

每次滴答声,你都需要把相机调一小段距离,直到达到所需的方向。你要么需要:

a) 创建一个事件处理程序并订阅其中一个ticketvent(选择一个合适的,然后确保选择一个阶段,无论是phase.START还是phase.END,否则代码将在一帧内运行多次)。

b) 无论你的代码已经在哪种方法中(注意:这个代码必须已经被调用过一次),然后在那里执行lerping。

不知道如何计算lerp?堆栈溢出已经解决了这个问题。

 类似资料:
  • 我正在制作的网站可以在德语和英语之间切换显示语言。Shaka player似乎支持本地化切换,但我无法用英语以外的任何语言显示该播放器。尝试在新沙卡上使用changeLocale。用户界面。本地化实例,但它似乎对玩家没有影响。 如果能在不同地区之间切换,我将不胜感激。

  • 问题是: 所以我在制作这个2D平台游戏时遇到了一个问题。当玩家跳到一个平台上并离开它时,重力不会影响它,它不会掉下来,直到你再次按下跳跃键,就好像它认为它仍然在地面上,直到你更新他。我已经把问题缩小到重力或碰撞,但找不到问题。有人能帮忙吗?我在下面附上代码。 代码:

  • 我正在尝试为我为MC 1.10创建的mod更改播放器的模型。我已经尝试了几件事,但都没有成功。我已经制作了一个模型和渲染器,但无法让它替换播放器。这是我尝试的(自定义模型称为悬停爪(长故事)): 也: 我浏览了整个网站,以及minecraft和forge论坛。 请帮忙! 编辑:我已经查看了IChun的变形模型的源代码,但我找不到它是如何改变玩家模型的。如果你回答这个问题,说我应该看看这个mod,那

  • 我目前正在开发一个插件,可以让你假设另一个玩家的身份。它几乎完美无缺地做到了这一点:您的UUID和用户名被更改为您假定为服务器端的用户的身份,就服务器和插件所知,您似乎就是那个玩家。你将拥有与他们相同的等级,相同的权限,一切。我唯一没能得到的就是皮肤。我以为当UUID是的时候,一个玩家的皮肤会为其他玩家改变,但事实似乎并非如此。我使用反射来更改GameProfile和EntityPlayer中的U

  • 我正在做一个平台游戏,玩家有一把剑。我希望玩家只能在他下面有地面的时候攻击(所以他不能在空中攻击)。所以我实现了这段代码: 但是.. 每次返回零。虽然如果我将添加到测试玩家是否在地面的部分,它仍然存在!(虽然接地仍然等于零) 以下是完整的代码: 有人能帮忙吗?:)

  • 问题内容: 我试图在按下按钮时逐渐提高精灵速度,而不是仅移动恒定速度。同时设置最大速度限制。我希望你明白我的意思。 问题答案: 您的示例代码有很多(最初)错误。 您正在覆盖该方法。建议您改写该方法。如果您要覆盖顶级容器(如)的方法,则建议您不要这样做。相反,使用类似的东西作为自定义绘画的基础… 您正在处理过去的上下文。这是非常危险的,因为这样可以防止其他东西被涂上。该上下文是一个共享资源,一切都需