gpt4 book ai didi

c++ - 概念 : incrementing inside a while loop

转载 作者:行者123 更新时间:2023-11-30 02:06:58 25 4
gpt4 key购买 nike

场景

我正在研究一个 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 .. //
}

基本思想是:当我继续添加元素时,它将为我垂直放置它们。

问题

该类在主函数内实例化,元素在我的游戏循环内和结束时添加并绘制到屏幕上。这意味着,每一帧,element 计数器都会递增,而它应该只在第一次添加唯一元素时递增。我考虑过添加唯一标识符作为参数,比如每次调用该方法时手动对它们进行编号,但这似乎违背了我的目的。

我只是在寻找一些可以解决这种循环内递增问题的想法。我有几个场景需要这样做,HUD 是我遇到的第一个场景。

最佳答案

我在 XNA 游戏(所以 C#)上做了类似的事情。我的类(class)有一份要写在屏幕上的 list :

struct to_write {
string text;
Vector2 position; // X and Y coords relative to the screen
}

private List<to_write> _logs;

我做了一个“写入”函数,它向 _logs 列表添加了一个新的 to_write 元素

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)。

关于c++ - 概念 : incrementing inside a while loop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8312510/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com