pygame에서 font는 텍스트를 화면에 렌더링하는 데 사용되는 기능이다.
기본적인 순서는 pygame.font.Font로 글꼴 및 크기를 설정하고 render()로 텍스트를 로드, blit로 화면에 표시한다.
1) pygame.font.Font VS pygame.font.SysFont
pygame.font.Font | pygame.font.SysFont | |
사용 방법 | pygame.font.Font(font,size) | pygame.font.SysFont font,size,bold=False,italic=False) |
폰트 사용 방식 | 폰트 파일 경로에서 가져옴 | 시스템 폰트 사용(system font) |
굵기 및 기울이기 | 불가능 | 가능 |
함수의 인수 | 2개(font,size) | 2~4개(font,size,bold,italic) |
내가 다운로드한 폰트를 쓰고 싶다면 pygame.font.Font, 시스템 폰트를 사용하고 싶다면 pygame.font.SysFont를 사용하면 된다.
import pygame
print(pygame.font.get_fonts())
이 코드 실행시 pygame.font.SysFont로 사용 가능한 폰트들 리스트를 output으로 만나볼 수 있다.
(필자의 경우 Font를 다양하게 사용한다면 다른 사람의 컴퓨터로 작업할 수도 있고 github로 프로젝트 한다면 올리게 될텐데 Font함수로 따로 다운해서하기보다 SysFont를 사용하는 것이 좋을 것이라 생각한다.)
필자의 경우 쓰기 좋아 보이는 폰트 비교를 위해 일일이 실행해서 찾아보기보다 Google Slides에서 실험해보았다.
본래 폰트를 None으로 하면 한글이 ▯▯▯이런식으로 나온다.
이 폰트 리스트 중에 앞에 'hy한글'로 구성된 폰트를 사용하면 한글이 잘 출력되는 것을 알 수 있다.
import pygame,sys
WHITE=(255,255,255)
screenw,screenh,FPS=350,200,80
def main():
pygame.init()
screen=pygame.display.set_mode((screenw, screenh))
pygame.display.set_caption("font_comparison")
# font=pygame.font.SysFont(None,30)
font=pygame.font.SysFont('hy견고딕',30)
clock=pygame.time.Clock()
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
txt=font.render("안녕, pygame\n",True,WHITE)
screen.blit(txt,(100,100))
pygame.display.update()
clock.tick(FPS)
if __name__ == "__main__":
main()
font=pygame.font.SysFont(None,30) | font=pygame.font.SysFont('hy견고딕',30) |
2) font.render
font.reder(String,antialias,text_color,background_color=None)
String:화면에 띄울 텍스트(문자열)
antialias: 텍스트에 계단현상 방지 기술(부드러운 가장자리 처리)을 적용할지 여부/보통은 True함
└ True: 텍스트가 더 부드럽게 렌더링됨
└ False: 텍스트가 약간 픽셀화될 수 있음
text_color: 텍스트 색상, tuple (R,G,B)로 지정
background_color(기본값은 None이며 투명임): 텍스트 배경 색상, tuple (R,G,B)로 지정
import pygame,sys
WHITE=(255,255,255)
GREEN=(0,255,0)
LIGHT_GRAY=(200,200,200)
screenw,screenh,FPS=400,300,80
def main():
pygame.init()
screen=pygame.display.set_mode((screenw, screenh))
pygame.display.set_caption("font_background")
font=pygame.font.SysFont('arial',30,True)
clock=pygame.time.Clock()
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
screen.fill(LIGHT_GRAY)
txt1=font.render("font_background ON",True,WHITE,GREEN)
screen.blit(txt1,(50,50))
txt2=font.render("font_background OFF",True,WHITE)
screen.blit(txt2,(50,120))
pygame.display.update()
clock.tick(FPS)
if __name__ == "__main__":
main()
이와 같이 배경색의 경우 글자 뒤에 색상이다. background_color의 경우 안 쓸때는 안써도 된다. 색상의 경우 주로 tuple로 지정하는 이유는 코드 안에서 바뀌지 않을 색상 값이기에 데이터가 고정되어야 하거나, 변경이 일어나면 안 되는 상황에서 안전성이 좋다. 또한 성능면에서 튜플은 리스트보다 메모리 사용량이 적고, 처리 속도가 더 빠르기에 blit로 좌표를 설정할때 등에 쓰면 좋다. |
3) screen.blit()
screen.blit(txt,pos): font.reder해 대입한 틱스트 변수를 원하는 위치 표시하는 코드
txt:표시할 텍스트
pos: (x,y)로 구성, 원하는 위치인 왼쪽 위 꼭짓점을 시작으로 텍스트를 표시
import pygame,sys
LIGHT_GRAY=(200,200,200)
BLUE=(0,0,255)
WHITE=(255,255,255)
screenw,screenh,FPS=300,150,80
def main():
pygame.init()
screen=pygame.display.set_mode((screenw, screenh))
pygame.display.set_caption("font_blit")
font=pygame.font.SysFont('arial',30,True,True)
clock=pygame.time.Clock()
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
screen.fill(LIGHT_GRAY)
mouse_x,mouse_y=pygame.mouse.get_pos()#마우스 위치 얻어오기
mousetxt=font.render(f"{mouse_x}, {mouse_y}",True,BLUE)
screen.blit(mousetxt,(0,0))
txt=font.render("font_blit",True,WHITE)
screen.blit(txt,(100,100))
pygame.display.update()
clock.tick(FPS)
if __name__ == "__main__":
main()
코드를 실행 후, 텍스트의 왼쪽 위 모서리에 마우스를 가져다대면 (100,100)에 거의 맞는 것을 알 수 있다. 즉, 설정한 위치인 (100, 100)을 기준으로 텍스트가 화면에 표시되며, 이 위치는 이를 통해 텍스트의 왼쪽 위 모서리가 기준이 되는 것을 알 수 있다. |
다음 글에서는 pygame에서의 font의 고질적인 문제인 개행문자(\n)가 제대로 적용이 안된다는 점에 대해서와 해결책에 대해 다룰 것이다. 또한 특수문자는 띄어지지않으니 단념하자.( ▯ 이런식으로 띄어진다.)
'python study > import pygame' 카테고리의 다른 글
python) pygame,키보드 처리 (1) (0) | 2024.12.27 |
---|---|
python)pygame, font(+개행문자 문제 해결 방법) 텍스트 띄우기(2) (0) | 2024.12.27 |
python)pygame에서 동적 그림 처리, 제대로 이해하기 (0) | 2024.12.25 |
python)pygame에서 그림이 그려지는 순서, 제대로 이해하기 (0) | 2024.12.23 |
python)pygame 좌표계의 특성과 컴퓨터 화면 스캔 방식 이해 (0) | 2024.12.23 |