简单的弹丸运动
Simple Projectile Movement
我试图在按下空格键后发射弹丸,但是我实现它的方式似乎只在按下空格键时发射。我想过也许创建一个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
(,而不是布尔变量,您将在每一帧时持续跟踪和更新该列表。
相关文章:
- 在c++中用vector填充一个简单的动态数组
- (C++)分析树以计算返回错误值的简单算术表达式
- 我的简单if-else语句是如何无法访问的代码
- 使用简单类型列表实现的指数编译时间.为什么
- 如何在BST的这个简单递归实现中消除警告
- 一种在C++中读取TXT配置文件的简单方法
- 关于简单C++函数(is_palindrome)的逻辑的问题
- 显示错误输出的简单数组排序程序
- 当无法使用模板和宏时,生成类型变体C++代码的最简单方法是什么?
- 退出简单while循环时出现问题
- 为什么简单的算术减法在"if"条件下不起作用?
- C++-字符串是否包含一个带有简单循环的单词
- 关于 c++ 函数中指针赋值的简单问题
- 从函数返回任意简单类型的数据
- 如何在没有函数的情况下编写此代码并使C++更简单?
- 有没有办法简单地从 GPU 调用多个 cpp 输出文件?
- 在简单示例中,Python3 + ctypes 回调会导致内存泄漏
- 在 3D 景观中模拟球的运动.最简单的方法
- 简单的弹丸运动
- 简单运动模拟中的分段错误