#author("2023-05-15T12:16:57+09:00;2023-04-20T19:11:58+09:00","","")
#author("2023-05-30T00:25:14+09:00","","")
* タイルモードモードの文字表示1 [#f8516ba8]
タイルモードでの簡単な表示は、タイルサイズに合わせることです。1つのタイル(8×8ドット)を基本サイズとして1文字分を格納していきます。今回の文字データは半角文字、全角のひらがな、全角のカタカナのみ、といった具合に予め決めておきます。このようにするとソースコード側が非常にシンプルになります。
タイルモードでの簡単な表示は、タイルサイズに合わせることです。1つのタイル(8×8ドット)を基本サイズとして1文字分を格納していきます。今回の文字データは半角文字、全角ひらがな、全角カタカナのみ、といった具合に予め決めておきます。このようにするとソースコード側が非常にシンプルになります。

#ref(1.png,nolink)

 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();
 	}
 }

 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++;
 	}
 }

*** 動作画面 [#xe685618]
#ref(2.png,nolink)

** 履歴 [#p19fd445]
- 2023/04/16
- 2007/10/11

トップ   差分 履歴 リロード   一覧 検索 最終更新   ヘルプ   最終更新のRSS