我按下移动按钮使我的坦克加速时出现问题,当我放开它时减速。因为我还没有成为职业选手而对我不要太苛刻,因为我还在学习并提前致谢!
我也有变量叫做' 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;
}
}
答案 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 ++)以及速度和速度之间的差异。