2011-11-19 11 views
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); 
    } 
} 

I "他の場合(* C == * start_line)" comparsionは私に問題を引き起こしているものであることをかなり確信して。それを置き換えるものは確かです。

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

しかし、まだあった私が間違っているつもりだった知っていいだろう:私は私がすべての改行を使用していないか、私はちょうどに行くことができますする予定はありませんのでけれどもね。 *注:上記のコードはうまくいきました。問題はなく、倍増効果もあります。だから私はそれが私のテキスト分割コードだと確信しています。

+1

イメージは非常に小さいです - 正直なところ、私は問題を見ることができません:/ちょうど発言:あなたは深度バッファを使用していないですか? –

+1

@cli_hlt画像を右クリック→画像の表示(または画像の位置をコピーし、選択したウィンドウやタブにURLを貼り付ける)することで、フル解像度で画像を見ることができます。 – 01d55

+0

@ 01d55ああ、あなたに感謝しています。したがって、私はあなたの答えに従います - 私たちが持っている情報を最もよく推測するようです。 +1 –

答えて

1

ここにあなたのアイデアがあります:テキストレンダリングの方法では、スタティックカウンタを追加し、それを使ってレンダリングされる各文字列の色を設定します。 1つのフレームに多くの文字列があるようには見えないので、1つの色成分(赤など)の8ビットをカウンタに使用し、2つの他の成分を255に設定できます。 2つまたは3つの色成分にわたってカウンタ値を符号化する。

この小さなデバッグ補助機能を使用すると、各テキストがどの順序でレンダリングされるかを確認することができます。 pixieおよび/またはzoominを使用して、ピクセル値 "live"を表示できます。それ以外の場合は、スクリーンショットを撮り、結果を調べてください。

1

キャプチャで間違って描かれたテキストのように見えますが、通常はゲームに表示される文字列は「50b」です。通常は空の文字列であるものを描画しているように見えますが、迷惑な値、つまり未定義の振る舞いを拾うことがあります。

私はあなたの問題を見つけるのに十分な情報が不足しているため、確かに確信できません。あなたのglClearは私にとってはうまく見えるので、余分なテキストが意図したテキストと同じフレームに描画されていることが保証されます。

+0

ああ、私のせいで、50bは実際そこにいるはずです。それは "%ib"、intです。 – Danran

+0

ああ、 '("%ikw "、int)'が2回印刷され、2回目は画面の一部に描画されるべきではありません。どのような種類のロジックが '/ /テキストを描画する'の後に表示されますか? – 01d55

+0

いいえ、コードでは私は個人的にコードを2回印刷しません。しかし何らかの理由でそれはそうです。ここには完全な印刷があります。 http://pastebin.com/cs2QadC2 しかし、論理的に言えば、入力とタイマーのために少しだけSDLと組み合わされた一般的なC++コードです。特定のタイマーが秒に達すると、最初の値を更新するタイマーです。これは、intの値に20を加算し、タイマーを停止します。次のループで再起動されます。 しかし、それはかなりレンダリングベースのためのOpenGLと、入力とタイマーベースの機能のためのSDLにかなり分かれています。 – Danran

関連する問題