简单的弹丸运动

Simple Projectile Movement

本文关键字:运动 简单      更新时间:2023-10-16

我试图在按下空格键后发射弹丸,但是我实现它的方式似乎只在按下空格键时发射。我想过也许创建一个for循环或while循环,但通过我目前学到的知识,我也无法看到它的工作原理。

下面的代码是我实现的代码:

if (state->IsKeyDown(Input::Keys::SPACE))
{
    _projectile->_position->Y -= _projectile->_speed * elapsedTime;
}

实际上不确定这有什么问题,只是它作用于

按住空格键而不仅仅是按下空格键

一旦你抬起空格键,if -子句就不再执行,所以你需要在条件之外更新弹丸。 但是,您也不能无条件地执行此操作,因为您不想在按下空格键之前更新弹丸。

所以这里的解决方案是有一个布尔状态变量来跟踪空格键是否已被按下(例如,调用此projectile_launched(。 将其初始化为false因为游戏开始时可能没有射弹。

一旦有了它,if -子句需要更改为:

if (state->IsKeyDown(Input::Keys::SPACE))
{
    projectile_launched = true;
}

这将激活弹丸。 然后在渲染循环中添加一个额外的 if -子句projectile_launched

if (projectile_launched) {
    _projectile->_position->Y -= _projectile->_speed * elapsedTime;
}

这将允许在游戏的每一帧更新射弹。 请注意,您可能希望在以后弹丸到达环境边缘时停用projectile_launched

此外,我在这里展示的内容仅适用于单个弹丸。 您一次不能拥有多个。 要支持多个射弹,您需要一个射弹列表(例如,使用 std::vector(,而不是布尔变量,您将在每一帧时持续跟踪和更新该列表