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 に答える