在游戏中创建对象(坦克)的加速度

时间:2015-01-10 12:18:25

标签: c++ game-physics

我按下移动按钮使我的坦克加速时出现问题,当我放开它时减速。因为我还没有成为职业选手而对我不要太苛刻,因为我还在学习并提前致谢!

我也有变量叫做' speed'和' maxspeed'这是我玩过的,并没有结果很好,而basicaly下面的代码让我的坦克在更新功能中移动

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;
        }
}

3 个答案:

答案 0 :(得分:0)

逻辑上,.....假设您的defaultspeed为1且maxspeed为2.您可能想要另一个变量,我们可以将其称为deltaSpeed

然后,您的totalSpeed(坦克中的位置改变方向)为defaultspeed * deltaSpeed

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

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

答案 1 :(得分:0)

一些有用的牛顿方程:

f = ma

v ^ 2 = u ^ 2 + 2as

s = ut + 0.5 * a * t ^ 2

其中:

s =行进距离(m)

u =初始速度(m / s)

t =时间(秒)

a =加速度

f =强制

m =质量

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

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

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

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

答案 2 :(得分:0)

在这段代码中:

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;

当你有点工作时,你的下一个问题就是无法驾驭。我认为你会被建议谷歌矢量(数学,而不是C ++)以及速度和速度之间的差异。