본문 바로가기

NDS

폰트형 한글 출력 함수 - setFont

2008/07/30 - [NDS] - 한글 처리함수를 좀 더 구체화?
원본 출처 : http://www.scgyong.net/wiki/index.php/GFN_Maker


void setFont ( u8 screen, int x, int y, char * text, ...)
 

Output Font on the DS screen. Works like a printf function

Parameters:
screen  Choose the screen (0 or 1)
x  X position
y  Y position
text  String to output. The following commands are avaiblable : %s to output another string, %d to output a value, %fX to change Xth font, %cXX to change XXth color.
Here's an example : setFont(0, 10, 10, "내 이름은 %s이며 난 그저 %d개의 치아를 가지고있다.", "Mollusk", 20);

테스트 코딩
setFont(0, 10, 20, "파라미터 없이 기본 문장");
setFont(0, 10, 40, "기본색 %c04BLUE %c15DARKGRAY %c25PINK");
setFont(0, 10, 60, "%f0%c28랜덤COLOR! @123");
setFont(0, 10, 80, "%f1%c28랜덤COLOR! @123");
setFont(0, 10, 105, "%f2%c28랜덤COLOR! @123");
setFont(0, 10, 130, "%f1문자:%s 4x3=%d", "문12자", 4*3);
첫 수정판
두번째 수정판
세번째 수정판

세번째. 글자 폭을 최적화 했다.


폰트는 font.h 순서대로이며 1자리 입니다. %fX
색은 기본 color.h 순서대로 만들기는 했지만 따로 빼온거라 수정할수있습니다.
2자리이며 00-28(28은 원래 없던건데 랜덤색입니다) %cXX

색 예제는 나중에 추가.

문제 되는점이라면...

현재 문제되 보이는 곳은 없습니다.

수정할부분은 한글위주로 쓸꺼라 빈칸을 짧게 띄우기 위해서 영문쪽을 폭을 좁게 해놨는데요, 하나마다 원래폭을 만들긴 좀무리더라도 영문 폰트내에서 빈칸 , . ; : + - ? 처럼 큰공간을 차지하지않는 글자들은 작은 폭을, 숫자랑 영문은 좀더 긴폭을 가질수있었으면 좋겠네요. 그래서 현재 한글,숫자,영문 3개로 저장해놓았습니다. 영문 주소를 채크해서 짧은 폭을 읽게 할수도있을거같네요. 차차 수정...
Gyong님 원본 설명에 Fixed width font 만 지원한다는게 아쉽게 느껴지네요.
--> 화일을 3개(한글+영문용+숫자등 그외용)로 분리했고 최적화 시켰습니다.
Font.cpp 에 아래 내용 추가로 영문일경우는 강제로 다음 폰트에서 찾도록 했습니다.
#include <CTYPE.H>

// 영문일 경우
if (isalpha(ch) && i==0) continue;
// 영문+숫자 포함
// if (isalnum(ch) && i==0) continue;
// 영문 대문자일 경우
// if (isupper(ch) && i==0) continue;

폰트를 추가하는 법은 Data폴더의 CharacterMap.exe로 GFN생성시 한글 폭이 20정도에서 잘보인다면 숫자폭은 강제로 10정도 맞추는게 좋으며(빈칸때문에) 영문은 한글보다 작게 보는데 이상없는정도로 잡으면 됩니다.
Font.cpp 화일에 다음 순서로 설정하시면 됩니다.
만약 영문숫자의 폭이 같아도 상관없다면 한글+영문숫자용 파일 2개만 만드시고 영문숫자용을 2군데 다 적어넣으시면 됩니다.
case MALGUN_BOLD:
{
	static StFont *fonts[] = {
		(StFont *)malgunn_bold_12pt_7x19, // 숫자등 그외
(StFont *)malgun_bold_12pt_14x19, // 한글 (StFont *)malgune_bold_12pt_11x19 // 영문 }; m_pimpl->fonts = fonts; m_pimpl->count = sizeof (fonts) / sizeof (fonts[0]); } break;


setFont 소스는 Palib, Ndslib 크게 안탑니다. 쓰려면 맞게 수정하긴해야하지만요.

'NDS' 카테고리의 다른 글

SuChupDS 이미지  (1) 2008.08.06
SuChupDS - 그리는 메모장  (0) 2008.08.04
한글 처리함수를 좀 더 구체화?  (1) 2008.07.30
no$gba debugger?  (0) 2008.07.29
Palib 한글 구현 - Alpha blending  (4) 2008.07.28