字符串在向量数组中重复

时间:2011-11-19 00:06:06

标签: c++ text-rendering

修改:更改标题以更好地反映当前问题。

我知道现在是问题的根源所在,它与文本分割部分功能有关。我现在记得我做了什么,我改变了分裂文本,因为我的教程返回了一个错误。

for(const char *c=text;*c;c++) 
{
    if(*c=='\n') {
        string line;
        for(const char *n=start_line;n<c;n++) line.append(1,*n);
        lines.push_back(line);
        start_line=c+1;
    }
}

if(start_line)
{
    string line;
    for(const char *n=start_line; n < c;n++) line.append(1,*n);
    lines.push_back(line);
}

'c'返回未声明,并且没有提及任何其他c,所以我猜它指的是上面for循环中的指针。虽然将“if(start_line)”带入第一个代码块,但仍然将文本中的每个字符返回给我,而不仅仅是整个代码。
所以我将代码更改为以下内容:

for(const char *c=text;*c;c++) 
{
    if(*c=='\n') 
    {
        string line;
        for(const char *n=start_line;n<c;n++) line.append(1,*n);
        lines.push_back(line);
        start_line=c+1;

        if(start_line) 
        {
            string line;
            for(const char *n=start_line;n<c;n++) line.append(1,*n);
                lines.push_back(line);
        }
    }
    else if (*c == *start_line)
    {
        lines.push_back(text);
    }
}

我很确定“else if(* c == * start_line)”比较是导致我这个问题的原因。不确定但要用什么来代替它。我想虽然因为我没有使用任何换行或者不打算我可以选择:

for(const char *c=text;*c;c++) 
{
    lines.push_back(text);
    break;
}

但是,如果我出错了,仍然会很高兴。 *注意:上面的代码现在工作正常,没有问题和倍增效果。所以我确定这是我的文本分割代码。

2 个答案:

答案 0 :(得分:1)

看起来该捕获中错误绘制的文本是“50b”,我怀疑这是一个通常出现在游戏中的字符串。看起来你正在绘制一些通常是空字符串的东西,但有时会拾取垃圾值 - 换句话说,是未定义的行为。

我当然不能确定,因为我根本没有足够的信息来找到你的问题。你的glClear看起来很好,所以你可以放心,额外的文字被绘制在与预期文本相同的框架中。

答案 1 :(得分:1)

以下是您的想法:在文本渲染方法中,添加一个静态计数器并使用它来设置每个渲染字符串的颜色。由于每帧似乎没有那么多字符串,你可以使用一个颜色组件的8位(例如红色)作为计数器,并将其他2个组件设置为255.如果你有超过255个字符串,你可以仍然将计数器值编码为2或3个颜色分量。

使用这个小调试辅助工具,您将能够看到每个文本的呈现顺序。您可以使用pixie和/或zoomin查看像素值“实时”。否则,只需截取屏幕截图并检查结果。