gpt4 book ai didi

java - 如何使实体向 x 和 y 移动?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:32:29 24 4
gpt4 key购买 nike

我正在寻找一种方法让我的实体(一颗子弹)向 x 和 y 方向移动,这是子弹发射时玩家所在的位置。所以在我的实体类中我有 -

   float xSpeed = 1.0F;
float ySpeed = 0.0F;

如果我想在对角线上移动实体,我会让 xSpeed 和 ySpeed = 1.0F我如何让它移动到另一个 x 和 y 的目录中?

感谢帮助编辑 - 已解决,谢谢帮助对于发现此问题需要帮助的任何其他人,这是我的代码-

    float xSpeed = 0;
float ySpeed = 0;

然后我有一些数学可以使它们以相同的速度移动

   ySpeed =  ySpeed * (float) (2.5 / Math.sqrt(xSpeed * xSpeed + ySpeed * ySpeed));
xSpeed = xSpeed * (float) (2.5 / Math.sqrt(xSpeed * xSpeed + ySpeed * ySpeed));

此代码用于设置 xSpeed 和 ySpeed,基于您要移动的 x 和 y

    xSpeed = (Game.PlayerX - x) / 3;
ySpeed = (Game.Playery - y) / 3;

最后,将 xSpeed 和 ySpeed 添加到实体的 x 和 y

    this.x += xSpeed;
this.y += ySpeed;

最佳答案

通常的方法是设置相对的 x 和 y 速度以在分配的行程时间内覆盖所需的 x 和 y 距离:

float xSpeed = (targetLocation.x - currentLocation.x) / travelTime;
float ySpeed = (targetLocation.y - currentLocation.y) / travelTime;

如果您想以预定速度而不是预定行程时间行进,请将 travelTime 设置为某个任意值(1.0f 将执行上述计算工作正常,所以你可以简单地消除除法)。然后计算这个因素:

float factor = desiredSpeed / Math.sqrt(xSpeed * xSpeed + ySpeed * ySpeed);

(请注意,如果 xSpeedySpeed 都为 0,则除以零,但这只是表示当前和目标位置相同。如果这是可能的情况,您应该包括适当的检查。)最后,重新调整 xSpeedySpeed 的系数:

xSpeed *= factor;
ySpeed *= factor;

请注意,通过将 travelTime 设置为 1,这只是将预定速度乘以行进方向与x 轴根本没有提到三角函数。 :)

关于java - 如何使实体向 x 和 y 移动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8537202/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com