概念性的:在while循环中递增
Conceptual: incrementing inside a while loop
场景
我正在做一个HUD类来帮助我开发一个OpenGL项目。我希望能够使用add_element(char*, float)
方法动态地将新元素添加到屏幕上(定位将自动发生)。下面是上述代码:
class HUD {
public:
HUD();
~HUD();
private:
int elements,
spacing;
public:
void add_element(char*, float);
};
HUD::HUD() : elements(0), spacing(10) {}
HUD::~HUD() {}
void HUD::add_element(char* string, float value) {
++elements;
// .. render to screen .. //
}
基本思想是:当我继续添加元素时,它将为我垂直定位它们。
类在main函数中被实例化,元素被添加到屏幕上并在游戏循环结束时被绘制。这意味着,每一帧,element
计数器增加,而它应该只在第一次添加唯一元素时增加。我考虑过添加唯一标识符作为参数,比如每次调用方法时手动编号,但这似乎违背了我想要达到的目的。
我只是在寻找一些可以解决循环内这种类型的递增的想法。我有几个场景需要这样做,而HUD是我遇到的第一个场景。
我在制作一款XNA游戏(所以是c#)时也做过类似的事情。我们班有一张要写在屏幕上的东西清单:
struct to_write {
string text;
Vector2 position; // X and Y coords relative to the screen
}
private List<to_write> _logs;
我做了一个"写"函数,它添加了一个新的to_write元素到_logs列表
void Write(string txt, Vector2 pos)
{
_logs.AddLast(new to_Write() { text = txt, position = pos });
}
但是屏幕上的实际输出只发生在绘制函数期间:
foreach(to_write w in _logs)
// write w.text at coordinates w.position.x and w.position.y
_logs.Clear();
这个类的Update()和Draw()方法是最后调用的,允许每个其他组件向HUD添加自己的信息。您可以通过使用一个简单的数组并保持一个数组指针来简化操作,这样添加元素写入和清除列表都是O(1)。
稍后,您所写的这些"元素"将是一个类的实例(这只是一个很好的方法),我们说:Element。然后你可以为HUD类添加一个私有成员std::set<Element>elements
,这是一个容器,不能有相同的对象两次。因此,在您的add_element方法中,您使用elements.size()
方法添加elements.insert( element )
,您将获得其中唯一的元素计数。
顺便说一句,这不是有效的(试图在每一帧插入元素),但你得到的图片。参见c++文档关于std::set
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- while循环中while循环的时间复杂度是多少
- 在while循环中输入带有std::cin的字符串后,控制台会输出大量胡言乱语
- 擦除while循环中迭代的元素
- 为什么我不能在 while 循环中创建线程?
- 退出简单while循环时出现问题
- 如果条件为TRUE(最佳方式?),则在do while循环中后置增量
- 即使没有满足他们的条件,我也无法通过一些 do-while 循环
- 嵌套While循环不起作用(C++问题)
- 如何通过替换顺序代码的while循环来添加OpenMP for循环
- 使用 GMP 的 while 循环出现问题
- 程序以使用 C++ 中的 while 循环查找一组数字的最小值
- 为什么在 while 循环中返回表达式不起作用
- 如何使用 do while 循环确定最高值和最低值
- 如何读取单个字符并在输入两个字符序列时输出? 使用 while 循环和C++
- 用于在 C++ 中使用 while 循环查找下一个素数的简单函数
- OpenCV QT,显示视频的帧(不使用while循环)
- 输入循环 while 函数
- c++中的循环(while)
- 为什么这段代码没有循环(while)