在游戏中创建物体(坦克)的加速度

Creating acceleration of an object (tank) in a game

我无法让我的坦克在我按下移动按钮时加速,而在我松开它时减速。不要因为我不是专业人士而对我太苛刻,因为我还在学习,在此先感谢!

我也有名为 'speed' 和 'maxspeed' 的变量,我试过它们但结果并不好,下面的代码基本上让​​我的坦克在更新函数中移动

if(TestName->Tank[0].up == true){
            TestName->Tank[0].position_y = TestName->Tank[0].position_y + (TestName->Tank[0].speed +     0.06f);
        }
        if(TestName->Tank[0].down == true){
            TestName->Tank[0].position_y = TestName->Tank[0].position_y - 0.06f;
        }
        if(TestName->Tank[0].right == true){
            TestName->Tank[0].rotation = TestName->Tank[0].rotation + 0.6f;
        }
        if(TestName->Tank[0].left == true){
            TestName->Tank[0].rotation = TestName->Tank[0].rotation - 0.6f;
        }
}

逻辑上,.....假设您的 defaultspeed 是 1,maxspeed 是 2。您可能需要另一个变量,我们称它为 deltaSpeed.

那么你的totalSpeed(Tank's Position in a direction)是defaultspeed * deltaSpeed.

您还需要检查用户是否正在按下按钮,如果是,则增加(固定数量或指数)deltaSpeed。当用户释放按钮时,然后减少 deltaSpeed。这会给坦克加速和减速的错觉。

然后,当用户按下另一个方向时,您可以重置 deltaSpeed。

一些有用的牛顿方程:

f = ma

v^2 = u^2 + 2as

s = ut + 0.5 * a * t^2

其中:

s = 行驶距离(米)

u = 初始速度 (m/s)

t = 时间(秒)

a = 加速度

f = 力

m = 质量

重新排列这些方程式后,您可以计算给定时间段内加速度的变化,进而计算速度的变化,进而计算距离的变化。

游戏将以不同程度的简化来模拟这些规则(例如,您可以编写代码,按下 'W' 将在坦克面对的方向产生 X 牛顿的力,或者您可以选择限制最大值速度,使力与当前速度成反比(为功率方程建模)。

或者您可以将 F 计算为功率方程在每次模拟通过之间的时间段内的积分(这是飞行模拟可能会做的)。

希望有一些想法可以指导您找到一些有用的文献。

在这段代码中:

TestName->Tank[0].position_y = TestName->Tank[0].position_y + (TestName->Tank[0].speed +     0.06f);

它看起来很可怕,就像你试图在速度上增加加速度 (0.06),同时在位置上增加速度。加号不会改变速度,它只会计算结果并将其用于方程式。

分两步完成:

TestName->Tank[0].speed += 0.06f;
TestName->Tank[0].position_y += TankName->Tank[0].speed;

当你有那个位工作时,你的下一个问题将无法转向。我认为你最好 google 向量(数学,而不是 C++)以及速度和速度之间的差异。