C++中另一个类的枚举(使用SFML)
Enums from another class in C++ (with SFML)
我使用的是以下代码:
void GameObjectManager::DrawHUD(sf::RenderWindow& renderWindow)
{
std::map<std::string, VisibleGameObject*>::const_iterator itr = _gameObjects.begin();
while (itr != _gameObjects.end())
{
//if (itr->second->GetObjectType() == VisibleGameObject::HUD)
//{
itr->second->Draw(renderWindow);
itr++;
//}
}
}
绘制ObjectType HUD的所有元素。ObjectType是我的另一个类VisibleGameObject中的一个枚举。如果我在代码中使用斜杠(所以当我不检查枚举时),一切都很好。但当我只想绘制ObjectType HUD的对象时,我的程序就会陷入调试模式。我在调试中没有任何错误。它只是停留在画整个东西上。
有人看到我做错了什么吗?
提前感谢
Xentro
您遇到的问题是,如果条件不成立,则永远不会递增迭代器。如果您从不递增迭代器,它将永远不会等于end()
。您需要始终递增迭代器,并在if语句中进行处理:
void GameObjectManager::DrawHUD(sf::RenderWindow& renderWindow)
{
std::map<std::string, VisibleGameObject*>::const_iterator itr = _gameObjects.begin();
while (itr != _gameObjects.end())
{
if (itr->second->GetObjectType() == VisibleGameObject::HUD)
{
itr->second->Draw(renderWindow);
}
itr++; // unconditional increment.
}
}
如果你想的话,你可以使用基于范围的C++11以上的循环,比如:
void GameObjectManager::DrawHUD(sf::RenderWindow& renderWindow)
{
for (auto & e : _gameObjects)
{
if (e.second->GetObjectType() == VisibleGameObject::HUD)
e.second->Draw(renderWindow);
}
}
相关文章:
- 使用 SFML 和 C++ 将 Pixel 打印到屏幕上
- 如何使用 SFML 在贪吃蛇游戏中定义游戏结束?
- 使用 sfml 计算 FPS
- 使用 SFML 在矩形的矢量中查找鼠标单击量
- 使用 SFML 绘制曲线会给出错误的形状
- 使用 std::list 存储顶点并使用 SFML 绘制它们
- 如何在精灵表上的两个不同部分之间来回切换,同时用户仍使用 SFML 持有密钥
- 使用 SFML 降低向量中的值
- 使用 sfml 进行 2 个键盘输入
- 如何在主游戏循环中使用 sfml 只播放一次声音
- SFML 2.4.2 for Visual C++ 2017 使用 SFML 的 2015 版本
- 使用 SFML 和 std::thread 的编译器错误
- 为什么 event.mouseWheelScroll.delta 总是使用 SFML 返回 0
- 如何使用SFML鼠标移动分别移动多个图像
- 有没有一种简单的方法可以使用SFML在后台线程中播放声音
- 了解如何使用SFML函数将数据添加到地图中
- 在使用SFML时,我会得到记忆或出于界限异常,这是什么问题
- 使用SFML,现代OpenGL转换从2D点到3D
- 有什么方法可以修复 CLion 中使用 SFML 的程序"command timed out" GDB 错误?
- 在 Visual Studio 中使用 SFML 在 X64 中编译时出现问题