Doc.13 英数字の表示方法(タイルモード)

タイルモードでは基本的には1つのタイルに対し、1文字分を格納する方式です。

int main(void)
{
	InitBG();

	BGDrawChr(BG3.map, 1, 1, 'A');

	BGDrawStr(BG3.map, 1, 3, "0123 ABCD abcd +-*/");
	BGDrawStr(BG3.map, 1, 4, "あいうえお アイウエオ");

	for(;;)
	{
	    WaitForVsync();
	}
}

InitBG関数はチュートリアルの内容と被るので説明を省略します。

void BGDrawChr(u32 mapNo, s32 x, s32 y, u16 chr)
{
	u16* BGMap = (u16*)MAP_BASE_ADR(mapNo) + x + (y * 32);

	*BGMap = chr;
}
void BGDrawStr(u32 mapNo, s32 x, s32 y, char* str)
{
	u16 chr;
	s32 i=0, dx=0;

	for(;;)
	{
		chr = str[i++];

		if(chr == '\0')
		{
			return;
		}

		if(chr <= 0x7f)
		{
			// 1byte char
			BGDrawChr(mapNo, x + dx, y, chr);
		}
		else
		{
			// 2byte char
			switch(chr)
			{
				case 0x82: chr = str[i++] - 0x90 + 192; break;
				case 0x83: chr = str[i++] - 0x40 + 304; break;
				default:   chr = str[i++];              break;
			}

			BGDrawChr(mapNo, x + dx, y, chr);
		}

		dx++;
	}
}

chr, str関数です。今回のポイントはタイルデータを自前に加工して
半角文字、全角のひらがな、全角のカタカナの3種類を絞って用意したことです。

それぞれのインデックスは関数内で求めていて、特に2バイト文字(SJIS)だった場合は
switch文を使ってうまく計算をしています。

動作画面

clip_1.png

履歴

  • 2014/11/18
  • 2007/10/11

添付ファイル: fileclip_1.png 221件 [詳細]

Last-modified: 2014-11-18 (火) 17:35:07 (2628d)