DXライブラリのノベルのテキスト表示をするとき
文字数を多くするとウィンドウからはみ出てしまいます
右端までテキストが行ったら折り返す(メモ帳の書式の右端で折り返すにチェック入れた状態)ように表示させるにはどうしたらよいのでしょうか
テキストにて
Re:テキストにて
ゲームプログラミングの館の「サウンドノベル風文字列表示法2」にまさにその方法を書こうとしていたところだったのですが、
まず、文字列を表示した時のモニタ上の長さを取得する関数があります。
こちらの関数です。
http://homepage2.nifty.com/natupaji/DxL ... html#R17N2
この関数を使って表示すべき範囲を超えたと判断したら
折り返しましょう。
もしフォントサイズが変わらないのでしたら、何文字で何ドット分の領域をとるかは
事前にわかるので、何文字になったら折り返すとプログラムを書いてもいいかもしれません。
また、具体的には、表示させるべき文字列を2つにわけて、DrawFormatString関数を2つ使って表示させると簡単です。
表示させたい時にst1,st2にそれぞれ文字列を1文字ずつ入れてやることで、
2行に渡って表示できます。
まず、文字列を表示した時のモニタ上の長さを取得する関数があります。
こちらの関数です。
http://homepage2.nifty.com/natupaji/DxL ... html#R17N2
この関数を使って表示すべき範囲を超えたと判断したら
折り返しましょう。
もしフォントサイズが変わらないのでしたら、何文字で何ドット分の領域をとるかは
事前にわかるので、何文字になったら折り返すとプログラムを書いてもいいかもしれません。
また、具体的には、表示させるべき文字列を2つにわけて、DrawFormatString関数を2つ使って表示させると簡単です。
表示させたい時にst1,st2にそれぞれ文字列を1文字ずつ入れてやることで、
2行に渡って表示できます。
char st[/url][256]={ {"今日はDXライブラリの"}, {"勉強をします。"}, {"その中でもサウンドノベル風文字列表示の仕方を"}, {"勉強をしています。"} }; char st1[256],st2[256]; ・ウィンドウに収まるだけst1に文字を1文字ずつコピー ・1行に収まらないならあふれる分だけst2にコピー ・ if(st1[0]!='\0') DrawFormatString(x,y ,col, "%s" ,st1); if(st2[0]!='\0') DrawFormatString(x,y+20,col, "%s" ,st2);雰囲気としてはこんな感じでしょうか。