gpt4 book ai didi

c++ - 你如何根据按钮的按下来逐渐加速一个物体(Ogre3D)?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:42:14 25 4
gpt4 key购买 nike

我目前有一个对象,我想逐渐加速。您按住某个键的时间越长,它运行的速度就越快。我设法让它在一个键上正常工作(当它向右移动时)但是,它似乎不适用于其他方向。

我现在的代码是:

    if (mKeyboard->isKeyDown(OIS::KC_NUMPAD8)) 
{
mSpeed += mAcceleration*evt.timeSinceLastFrame;
movement.z -= mSpeed*evt.timeSinceLastFrame;
mAcceleration++;
}
if (mKeyboard->isKeyDown(OIS::KC_NUMPAD4))
{
mSpeed += mAcceleration*evt.timeSinceLastFrame;
movement.x -= mSpeed*evt.timeSinceLastFrame;
mAcceleration++;
}
if (mKeyboard->isKeyDown(OIS::KC_NUMPAD5))
{
mSpeed += mAcceleration*evt.timeSinceLastFrame;
movement.z += mSpeed*evt.timeSinceLastFrame;
mAcceleration++;
}
if (mKeyboard->isKeyDown(OIS::KC_NUMPAD6))
{
mSpeed += mAcceleration*evt.timeSinceLastFrame;
movement.x += mSpeed*evt.timeSinceLastFrame;
mAcceleration++;
}

并且工作正常的语句是最后一个。其余的只是正常移动,没有任何加速度。

我想知道如何让物体在其他方向也逐渐加速。

P.S 为了以防万一有人也想知道,我不能将“if”更改为“while”。当我更改它时,程序根本不运行。

P.P.S当我将其他对象更改为“else if”时,该对象起作用(在各个方向逐渐加速),但是,我不能再沿对角线移动,这也是我的问题。我试过做一些事情,例如

else if (mKeyboard->isKeyDown(OIS::KC_I) && mKeyboard->isKeyDown(OIS::KC_J))
{
mSpeed += mAcceleration *evt.timeSinceLastFrame;
movement.z -= mSpeed*evt.timeSinceLastFrame;
movement.x -= mSpeed*evt.timeSinceLastFrame;
mAcceleration++;
}

但它仍然没有沿对角线移动。

最佳答案

加速度应该是一个常数,除非你想让加速度加速。所以在一些图形中,我已经完成了关键输入,我有一个名为 boost 或 force 的变量,我将它定义为一个数字。然后,对于 if 语句,我将有:

if (mKeyboard->isKeyDown(OIS::KC_<whatever>)) {
object.boost();
} else { object.noBoost(); }

其中 boost() 是一个将对象内的 bool 值设置为 true 的函数。在更新函数中,我在绘制对象的地方有:

if (isBoosting) {
velocity += accel//where accel is a defined number
}

您不必添加所有这些东西,但我不会使用 mAcceleration++,而是将其删除并在其他地方定义其加速度并使用 mSpeed += acceleration *。 ..;。希望对您有所帮助!

关于c++ - 你如何根据按钮的按下来逐渐加速一个物体(Ogre3D)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47374342/

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