프로그래밍/python

pygame 에서 텍스트 출력

afterdark 2019. 7. 8. 01:10
반응형

pygame 에서의 텍스트 출력에 대해 아주 간단히 적어 보겠습니다. 다른 자잘한 함수는 제외하고 간단히 글자 출력에 관한 부분만......^^;

저는 리눅스에서 작업했지만 윈도우도 큰 차이는 없을것으로 생각됩니다. 글꼴 이름만 좀 다를 뿐이겠죠.

>

텍스트 출력은 간단히 다음과 같은 과정을 거칩니다.

font = pygame.font.Font('LexiGulim.ttf',30)  #폰트 설정
text = font.render("글자출력",True,(28,0,0))  #텍스트가 표시된 Surface 를 만듬
background.blit(text,(870,20))              #화면에 표시

두번째 줄부터 설명하면...

render 함수는 순서대로 출력할 텍스트,  안티앨리어싱의 사용여부, 글자색 으로 인자를 받습니다. 글자색은 흔히 이용되는 (R,G,B) 값으로 입력됩니다.

render 함수에서 리턴되는 text 라는 surface 를 blit 로 일반 이미지처럼 출력하면 됩니다. 뭐...간단하죠.

그럼 이제 제일 첫줄에 대한 설명을 해보겠습니다. 조금 길어질 것이므로 뒤로 뺐습니다.

폰트를 읽어들이는 방식은 2가지가 있습니다. 이미지 파일을 읽어 오는 것 처럼 직접 폰트 파일인 ttf 파일을 지정해서 읽는 방식입니다. 위에서의 예는 직접 폰트 파일을 읽는 방법입니다. 위 소스대로라면 실행파일과 같은 디렉토리에 "LexiGulim.ttf" 파일이 존재해야 합니다.

주의해야 할 점은 폰트에 한글이 없으면 한글이 'ㅁㅁㅁ' 와 같이 표시 된다는 것 입니다. 한글을 표시하려면 한글이 포함된 폰트 파일을 사용해야 합니다.

렉시굴림으로 한글 출력

위 스크린샷은 제작중인 블럭격파 게임에서 한글을 렉시굴림폰트를 이용해 출력한 것입니다.

다른 방식은 시스템에 등록되어 있는 글꼴 이름을 사용하는 것입니다. 우리가 흔히 '굴림체' 라던가 '바탕체' 라고 부르는 것과 비슷합니다. 시스템에 등록된 글꼴의 이름은 pygame 에선 다음과 같이 확인 할 수 있습니다.

pygame.font.get_fonts() 함수를 이용해서 현재 시스템에 등록된 글꼴의 이름을 모두 출력해 봤습니다.

위의 폰트중에 하나를 선택해야 하는데, 이 방법의 경우에도 한글을 출력하려면 한글이 포함된 폰트를 선택해야 합니다. 리눅스에선 기본적으로 사용하는 noto~ 관련 폰트에 한글이 포함되어 있습니다.

font = pygame.font.SysFont("notosanscjkkr",30)

폰트 설정을 위와 같이 하면 됩니다. 폰트의 직접적인 파일명을 입력하는게 아니라 폰트의 이름을 입력한다는 것에 주의 해야 됩니다.

>

여러 다른 OS 나 각기 다른 폰트 설정을 가진 컴퓨터에서 사용할 걸 생각한다면 공개가 되어 있고 배포가 자유로운 폰트를 프로그램과 같이 추가해서 배포하고, 직접 폰트파일인 ttf 파일을 읽어 사용하는 방법도 고려할만 합니다.

폰트 모듈을 초기화 하고 종료하는 "pygame.font.init()" 와 "pygame.font.quit()" 이 있지만 메뉴얼에 의하면, 파이게임을 초기화 하는 "pygame.init()" 등에서 자동으로 실행된다고 하니 특별한 경우가 아니면 명시적으로 사용할 필요는 없을듯 합니다.