数値を画像で表示

スコアやタイムなど、ゲームに欠かせない「数値」。表示をフォントに頼ってしまうのは簡単だが、どうにも見た目が美しくない。ならば予め数字の画像を作り、画像で表示してあげれば良い。
描画に関わる箇所なため、サンプルはDXライブラリで実装している。適宜変更すべし。

int ShowDigit(int Digit,int num) {
	int n = (int)pow(10.0,Digit);
	return (int)((num%(10*n))/n);
}
void DrawNumber(int num, int digit, int x, int y, int NumberName, int fx, bool Reverse) {
	if (Reverse) for (int i=1;i<=digit;i++) DrawGraph(x-i*fx,y,number[ShowDigit(i-1,num)+NumberName*10],TRUE);
	else for (int i=0;i<digit;i++) DrawGraph(x+i*fx,y,number[ShowDigit(digit-1-i,num)+NumberName*10],TRUE);
}
  • num:表示したい数字
  • digit:桁数(少ない時は0で埋める)
  • x,y:開始座標
  • NumberName:数字画像の種類
  • fx:一桁あたりの幅
  • Reverse:trueだと右から書く

numberには0〜9の画像を連番で入れる。更にNumberNameはenum辺りで指定した定数を指定することで、0〜9、10〜19、20〜29に入れた別々の数字の画像を適宜指定することができる。
以下のように呼び出して使う。

DrawNumber( score, min(6,DIGIT_(score)), 120, 240, NUMBER_BRIGHT, 11, true);

解説

ShowDigitは、指定した桁の数字を取ってくる関数である。ここに現在描画中の桁数を入れながらforループでxをずらして描画すれば、fxの間隔で数字をずらりと書くことができる。
左端に合わせた数値ならそのまま、右下に合わせた数値ならReverseにtrueを指定する。サンプルのように桁数を前の記事で書いたDIGIT_マクロとminマクロを組み合わせて指定することで、6桁以内なら0で埋める、それ以上ならそれに応じて桁を増やす、ということも可能である。