我去过这个网站尝试让我的汽车运动整理出来。 http://www.helixsoft.nl/articles/circle/sincos.htm
我一直有问题只是因为我使用的罪和cos而将车移动了一圈我认为我已经正确地完成了它虽然该网站确实使用了固定点数而我想使用浮点数。
这是我的代码
if(myEngine->KeyHeld(Key_W))
{
length -= carSpeedIncrement;
}
if(myEngine->KeyHeld(Key_S))
{
length += carSpeedIncrement;
}
if(myEngine->KeyHeld(Key_A))
{
angle -= 0.01f;
}
if(myEngine->KeyHeld(Key_D))
{
angle += 0.01f;
}
carVolocityX = length * (sin(angle));
carVolocityZ = length * (cos(angle));
carPositionX += carVolocityX;
carPositionZ += carVolocityZ;
car[0]->MoveX((carPositionX * sin(angle)) * frameTime);
car[0]->MoveZ((carPositionZ * cos(angle)) * frameTime);
我对如何做这个动作的新想法持开放态度,但它必须使用向量。任何人都可以看到我的错误。
感谢任何帮助。
答案 0 :(得分:1)
基于你对MoveX和MoveZ所说的话,我认为问题是你试图将绝对位置传递给期望速度的函数。尝试
car[0]->MoveX(carVolocityX * frameTime);
car[0]->MoveZ(carVolocityZ * frameTime);
答案 1 :(得分:0)
为什么在计算速度矢量和计算汽车的新位置时都应用sin和cos?
您的代码看起来像是在尝试使用键盘驾驶汽车。如果是这种情况,请尝试这个
car[0]->MoveX((carPositionX) * frameTime);
car[0]->MoveZ((carPositionZ) * frameTime);
请注意,我发现在实际计算距离时应用frameTime更清楚,并建议进行此编辑:
carPositionX += carVolocityX * frameTime;
carPositionZ += carVolocityZ * frameTime;
car[0]->MoveX((carPositionX));
car[0]->MoveZ((carPositionZ));
相反,如果您只是想绕圈移动它,而不允许'A'和'D'影响角度,
car[0]->MoveX((carPositionX * sin(angularVelocity * totalTime)));
car[0]->MoveZ((carPositionZ * cos(angularVelocity * totalTime)));
您可以使用键调整(新)变量angularVelocity,或者只是指定一个常量来查看它是否正常工作。变量totalTime是模拟开始以来的总时间。