|
|||||||||||||||
数値の書式指定でよく使用される書式指定項目の記述例 | |||||||||||||||
元ネタ
http://www.atmarkit.co.jp/fdotnet/dotnettips/116formatint/formatint.html
XNA の SpriteFont で 表示テストを行った結果、
空白や文字の横幅によって表示位置が変化するため、右揃えの1の位の位置に合わせるのは、
文字幅を均等にする方法が必要
FontName |
開発するパソコンにあるTrueTypeフォントの名前を指定。 |
Size | フォントサイズをポイント単位で指定。 |
Spacing | 文字間のピクセル数を指定。 |
UseKerning | カーニングの利用 |
Style | フォントスタイル(Regular、Bold、Italic)を指定。 |
UseKerning | カーニングの指定(true or false) |
CharacterRegions | 利用する文字範囲を指定。 初期値の ~~は全ASCIIコード 。 |
Kerning かと思ったが、結局、空白でそろえるのはダメみたいだった。
「0埋め」 のみはうまくいった。
あとの考え方として
1. xxx.Length で桁数をチェックしてそれにより描画位置をずらす・・・・下記ソースで成功
2. グラフィックの文字を「0」~「9」まで用意して数値表示関数を作る・・・・フォントさえ良ければ見た目も良いし実質ユーザー視点ではこれが最良か!
開き直って1の位の描画がずれても気にしないという考え方もある。
以下は試行錯誤したが、スペース文字の空白文字の幅が微妙な幅だったので
失敗したソースの1部
赤文字 = 意図した座標に表示されず失敗
青文字 = 意図した座標に表示できた
<Size>32</Size> で32にしている
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
// TODO: Add your drawing code here
Fc++;
// スプライトバッチ開始
spriteBatch.Begin();
//文字の描画
spriteBatch.DrawString(fontArial, "Game Over", new Vector2(0, 0), Color.White);
string str;
str = String.Format("{0:N0}", Fc );
spriteBatch.DrawString(fontArial, str , new Vector2(0, 32*1), Color.White);
str = String.Format("{0:000000} ", Fc );
spriteBatch.DrawString(fontArial, str , new Vector2(0, 32*2), Color.White);
str = String.Format("{0,-6}", Fc);
spriteBatch.DrawString(fontArial, str, new Vector2(0, 32 * 3), Color.White);
str = String.Format("{0, 6}", Fc);
spriteBatch.DrawString(fontArial, str, new Vector2(0, 32 * 4), Color.White);
str = "" + Fc; int length = str.Length;
str = " ".Substring(0,(5 -length)*3 ) + str;
spriteBatch.DrawString(fontArial, str, new Vector2(0, 32 * 5), Color.White);
int zure = (6-length)*24;
spriteBatch.DrawString(fontArial, ""+Fc, new Vector2(zure, 32 * 6), Color.White);
// スプライトバッチ終了
spriteBatch.End();
base.Draw(gameTime);
}