gpt4 book ai didi

java - 数学 vector 和旋转(自上而下的 java gamedev - 物理问题)

转载 作者:搜寻专家 更新时间:2023-11-01 01:56:41 26 4
gpt4 key购买 nike

我从事自上而下的汽车游戏已经有一段时间了,它似乎总是回到能够正确地做一件事。在我的例子中,它正确地完成了我的汽车物理。

我遇到了当前轮换处理不当的问题。我知道问题在于我的幅度在乘以 Math.cos/sin 方向时为 0,但我根本不知道如何解决它。

这是当前的底层代码。

private void move(int deltaTime) {

double secondsElapsed = (deltaTime / 1000.0);// seconds since last update
double speed = velocity.magnitude();
double magnitude = 0;

if (up)
magnitude = 100.0;
if (down)
magnitude = -100.0;
if (right)
direction += rotationSpeed * (speed/topspeed);// * secondsElapsed;
if (left)
direction -= rotationSpeed * (speed/topspeed);// * secondsElapsed;

double dir = Math.toRadians(direction - 90);
acceleration = new Vector2D(magnitude * Math.cos(dir), magnitude * Math.sin(dir));

Vector2D deltaA = acceleration.scale(secondsElapsed);
velocity = velocity.add(deltaA);

if (speed < 1.5 && speed != 0)
velocity.setLength(0);

Vector2D deltaP = velocity.scale(secondsElapsed);
position = position.add(deltaP);

...
}

我的 vector 类模拟了 vector 基础知识——包括加减法、乘以标量...等。

重申根本问题 - 即 magnitude * Math.cos(dir) = 0 当 magnitude 为 0 时,因此当玩家仅按下向右或向左箭头键而没有“加速”方向时不会改变。

如果有人需要更多信息,您可以在此处找到它

http://www.java-gaming.org/index.php/topic,23930.0.html

最佳答案

是的,那些物理计算都搞混了。根本问题在于,正如您已经意识到的那样,将加速度乘以方向是错误的。这是因为你的“方向”不仅仅是汽车加速的方向;这是汽车行驶的方向。

解决这个问题的最简单方法是首先分别考虑加速和转向。首先,加速:为此,您只有一个速度,并且有“向上”和“向下”键。为此,代码如下所示(包括将接近零的速度降低到零的阈值代码):

if (up)
acceleration = 100.0;
if (down)
acceleration = -100.0;

speed += acceleration * secondsElapsed;

if (abs(speed) < 1.5) speed = 0;

另外,你有转向,它改变了汽车运动的方向——也就是说,它改变了你乘以速度得到速度的单位 vector 。我还冒昧地稍微修改了您的变量名,使其看起来更像代码的加速部分,并阐明了它们的含义。

if (right)
rotationRate = maxRotationSpeed * (speed/topspeed);
if (left)
rotationRate = maxRotationSpeed * (speed/topspeed);

direction += rotationRate * secondsElapsed;

double dir = Math.toRadians(direction - 90);
velocity = new Vector2D(speed * Math.cos(dir), speed * Math.sin(dir));

您可以简单地将这两部分结合起来,在第二部分的速度计算中使用第一部分的速度,以获得完整的简单加速和转向模拟。

关于java - 数学 vector 和旋转(自上而下的 java gamedev - 物理问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7312773/

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