我试图在空格键被按下之后发射射弹但是我实施它的方式似乎只是在空格键被按下时发射。我想过可能会创建一个for循环或while循环但是根据我迄今为止所学到的知识,我也看不到它的工作原理。
以下代码是我实施的代码:
if (state->IsKeyDown(Input::Keys::SPACE))
{
_projectile->_position->Y -= _projectile->_speed * elapsedTime;
}
实际上并不确定这有什么问题只是因为它对按住空格键而不是仅按空格键
答案 0 :(得分:2)
一旦你抬起空格键,就不再执行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
),你将在每一帧继续跟踪和更新