スコア表示処理
今回もなんてことはないですが…。
例えば、1234を画像で表示する場合には、
こんな風に求めます。
千の位:1234÷(10^3)=1
百の位:1234%(10^3)÷(10^2)=2
十の位:1234%(10^2)÷(10^1)=3
一の位:1234%(10^1)÷(10^0)=4
DirectXのソースコードに落とすとこんな感じです。
// ============================================================================ // 数字の描画 // @param *pos 描画開始座標 // @param num 描画数字 // @param digit 桁数 // @param scale 描画倍率 // @param color 描画色 // ============================================================================ void CDirectGraphics::DrawNumber(D3DXVECTOR2 *pos, LONG num, int digit, FLOAT scale, D3DCOLOR color) { if(num < 0 || digit < 1) return; int rem = num % GetPowDecimal(digit); // 剰余を求めて int cnt = rem / GetPowDecimal(digit-1); // 桁の数値を求める if(cnt > 9) return; int cntX = 1; DrawSprite(-98, pos, &Rect(cnt*16, 0, (cnt+1)*16, 32).GetRect(), &D3DXVECTOR2(scale, scale), NULL, 0, color); for(int i = digit - 1; i > 0; i--) { rem = num % GetPowDecimal(i); cnt = rem / GetPowDecimal(i-1); DrawSprite(-98, &D3DXVECTOR2(pos->x+FLOAT(16*scale*cntX), pos->y), &Rect(cnt*16, 0, (cnt+1)*16, 32).GetRect(), &D3DXVECTOR2(scale, scale), NULL, 0, color); cntX++; } }
個人的な処理を解説すると、
Rect::GetRect()はRECT構造体を返し、
GetPowDecimal()は10^xを返すinline関数です。
DrawSpriteはスプライト描画のラッパー関数です。
(テクスチャ番号、描画座標、描画サイズ、描画倍率、…)
…まあ、でも、stringに入れて一文字ずつ切り出した方が早い
(分かりやすいという意味で)かもしれませんね…(´Д`;
DirectInput::Aquire()
何か、たまーにキー入力でおかしい動きをするので、
YANESDK3RDのコードを読んでみたところ、
Aquire()に失敗したときの処理が抜けていることを発見しました!
…うーむ、勉強になります。