gpt4 book ai didi

javascript - 向量,以最大速度计算运动力

转载 作者:数据小太阳 更新时间:2023-10-29 04:44:46 30 4
gpt4 key购买 nike

我正在构建一款小型太空射击游戏。当涉及到空间物理学时,我曾经遇到过数学问题。

用文字描述如下:有一个最大速度。因此,如果您全速行驶,您的飞船将在屏幕上一遍又一遍地移动,就像在旧的小行星游戏中一样。如果然后释放火箭助推器,您的船应该继续以该速度在屏幕上移动。

然后是我现在卡住的棘手部分。

如果您将船旋转任何 Angular 并再次提供助力,船应该尝试到达这个方向并且在谈到它的移动速度时永远不会超过最大速度。所以我的问题是。有人对这个问题有好主意吗?如果您知道要寻找什么,感觉就像以前做过。 :)

我将添加这个小图像来说明试图用一些向量计算来完成什么。 Max speed movement with force

红色环:最大速度

绿线:当前船舶方向。

黑线:方向以及船在 x 和 y 方向的移动速度。

黑环:运动的起源。

可以说明它,但很难为此找到一个好的数学解决方案。 :)

编辑

这是我现在在每一帧中使用的代码。它为船提供运动但不提供用户必须用其火箭助推器反作用以使船停止或减速的运动力。有了这个,它会在您释放飞船的加速速度时立即停止。

    //Calculates ship movement rules
var shipVelocityVec = GetVectorPosByAngle(shipMoveSpeed, shipRotationAngle);
var shipUnitVec =$V([Math.cos(shipRotationAngle),Math.sin(shipRotationAngle),0]);
var rawAccel = shipAccelSpeed / shipMass;
var scale = (shipUnitVec.dot(shipVelocityVec))/(shipTopSpeed * shipTopSpeed);
var v1 = shipUnitVec.subtract(shipVelocityVec.multiply(scale));
var finalAccelVec = v1.multiply(rawAccel);
console.log(finalAccelVec);

//move ship according to rules
var shipPosVector = $V([shipxPos, shipyPos, 0]);
var movementVector = shipPosVector.add(finalAccelVec);
shipxPos = movementVector.elements[0];
shipyPos = movementVector.elements[1];

要给出加速度,用户必须按住按钮。用户释放按钮时,加速度设置为零,必须再次加速以提供最大加速度 throttle 。

找到解决方案!在此处发布它是如何完成的。

最佳答案

您似乎混淆了什么 - 如果您正确使用向量,即使加速度处于不同的 Angular , 也没有问题将速度限制在最大速度。

您的设置应如下所示:

  1. 你的飞船应该有位置、速度和加速度。这些中的每一个都可以表示为二维向量(具有单独的 xy 组件)。
  2. 每一帧,将速度添加到位置,将加速度添加到速度。
  3. 每一帧,检查 speed不超过某个最大值。如果是这样,将速度限制为 normalizing速度矢量并将其乘以最大速度。

就是这样!无需考虑特殊情况 - 这就是矢量代数的魔力!

关于javascript - 向量,以最大速度计算运动力,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9295062/

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