gpt4 book ai didi

c++ - C++/SFML 中的平稳动量减速?

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

我正在用 C++ 和 SFML 制作一个“小行星”游戏,我想知道平滑的动量减速和加速。在原版游戏中,当你朝一个方向移动时,你会积累“动量”,按住按钮时动量增加,松开时动量减少。我已经开始了我自己的版本。目前我有一个包含船的动量的 sf::Vector2f。它可以是消极的或积极的。问题是,我无法正确实现减速(我什至还没有尝试加速)。我试过以下方法;

if (plr.momentum.x < 0) {
plr.momentum.x++;
}
if (plr.momentum.x > 0) {
plr.momentum.x--;
}
if (plr.momentum.y < 0) {
plr.momentum.y++;
}
if (plr.momentum.y > 0) {
plr.momentum.y--;
}

有了这个,在移动之后,玩家被慢慢地拖到窗口的左上角(坐标 0,0)。我假设这是因为 float 可以是,例如 0.05,满足“大于 0”的 if 语句。由此,它需要一个,使其成为一个负数。下一个 if 语句将其加一,然后不断循环。负 x 动量使您向左移动,负 y 动量使您向上移动,反之亦然。我想知道平滑减速和加速背后的方法。

如果您想知道,我使用以下代码根据玩家的动量移动玩家;

playerSprite.move(plr.momentum);

如果你不熟悉 SFML,sf::Vector2f 有一个 .x.y,它们在 >.move sf::Sprite playerSprite.move 相对于当前位置移动玩家;因此,如果玩家位于 (5,0),并且您执行 player.move(sf::Vector2f(-1,0)),则他们的坐标将为 (4,0)。

编辑:作为 friend 的建议,我现在有以下减速代码。减速效果很好,但在减速后,它又开始向左上角移动。这是什么原因造成的?

if (plr.xSlowdown < 0.f) {
plr.xSlowdown += 0.1f;
}
if (plr.xSlowdown > 0.f) {
plr.xSlowdown -= 0.1f;
}
if (plr.ySlowdown < 0.f) {
plr.ySlowdown += 0.1f;
}
if (plr.ySlowdown > 0.f) {
plr.ySlowdown -= 0.1f;
}

plr.xMomentum = floor(plr.xSlowdown);
plr.yMomentum = floor(plr.ySlowdown);

最佳答案

如果你想让你的宇宙飞船在推进器关闭时减速,你应该增加阻力。

阻力根据速度施加力:最简单的方法是对阻力系数 K 执行 F = -K v。因此,如果您的船的动量存储在 plr.xMomentumplr.yMomentum 中,您的程序将是:

// note:  "dt" is your timestep;
// if you don't have one, just choose some small value for "fraction", like 0.005
float fraction = drag_coefficient_K * dt;
plr.xMomentum -= fraction * plr.xMomentum;
plr.yMomentum -= fraction * plr.yMomentum;

加速将基于您的宇宙飞船的方向:

// note: "orientation" is the angle of your spaceship;
// the units of orientation are determined by "angle_scale",
// which should be chosen such that "angle_in_radians" is in radians...
float angle_in_radians = angle_scale * orientation;
float thrust_per_timestep = thrust_value * dt;
plr.xMomentum += thrust_per_timestep * cos(angle_in_radians);
plr.yMomentum += thrust_per_timestep * sin(angle_in_radians);

阻力和推力的结合有效地限制了您可以达到的速度(至少在没有重力辅助或其他东西的情况下......)。

关于c++ - C++/SFML 中的平稳动量减速?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12904539/

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