0

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

我现在知道问题的根源在于功能的文本拆分部分。我现在记得我做了什么,我更改了拆分文本,因为我的教程返回了一个错误。

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

但如果我错了,我还是很高兴知道。*注意:上面的代码现在可以正常工作了,没有问题,而且效果加倍。所以我确定这是我的文本拆分代码。

4

2 回答 2

1

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

当然,我不能确定,因为我根本没有足够的信息来找到您的问题。您的 glClear 对我来说看起来不错,因此您可以放心,额外的文本是在与您的预期文本相同的框架中绘制的。

于 2011-11-19T00:19:00.020 回答
1

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

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

于 2011-11-19T03:51:41.483 回答