字符串在向量数组中被复制

String being duplicated in vector array

本文关键字:复制 数组 向量 字符串      更新时间:2023-10-16

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

现在我知道问题的根源在于,它与函数的文本分割部分。我现在记得我做了什么,我改变了分割文本,因为我的教程返回了一个错误。

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;
}

但是如果我知道我做错了什么就好了。*注意:上面的代码现在工作得很好,没有问题和加倍效果。所以我确定这是我的文本分割代码。

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

有了这个小小的调试帮助,您将能够看到每段文本呈现的顺序。您可以使用pixie和/或变焦来查看"实时"像素值。否则,只需截图并检查结果。

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

当然,我不能确定,因为我没有足够的信息来找到你的问题。你的glClear对我来说看起来很好,所以你可以放心,额外的文本是在同一帧中绘制的。