번외1) font.size()
주어진 문자열이 특정 폰트로 렌더링될 때 차지하는 두 변수인 가로와 세로 크기를 반환한다.
width, height = font.size(String)
width: 텍스트의 가로 길이 (픽셀 단위)
height: 텍스트의 세로 길이 (픽셀 단위)
만약 세로 크기 변수만 쓰고 가로 크기 변수를 안쓴다면 _, height = font.size(String) 이런식으로 _를 써서변수가 사용되지 않을 것을 보여주자.
번외2) pygame은 개행문자가 적용이 안된다?
pygame에서 font의 특징이 매우 큰 하나 있는데 개행문자(\n)가 적용이 안된다는 점이다. 즉, 줄바꿈이 안된다.
이는 이전 글에서 '안녕, pygame\n'을 출력했는데도 ▯가 나오는 것을 통해 알 수 있다.
(이는 pygame.font.SysFont이든 pygame.font.Font이든 안된다.)
|
||
text=""" string1 string2 """ |
와 같은 형식도 줄바꿈이 되지 않으며, """을 인식하지 않는 것이 아닌 ▯으로 인식하는 것을 알 수 있다. |
따라서 다른 방법을 사용해야한다.
첫번째 방법은 원하는 크기의 가로 세로를 계산해 특정 가로의 길이를 넘으면 x좌표는 이전 글의 처음 좌표부터, y좌표는 줄바꿈 크기만큼 증가시키는 방법이다.
import pygame,sys
WHITE=(255,255,255);LIGHT_GRAY=(200,200,200)
screenw,screenh,FPS=500,300,80
text="이 코드는 pygame에서 텍스트 줄바꿈을 테스트,이 코드는 특정 가로 폭을 초과하면 텍스트를 줄바꿈한다."
x,y=50,50#시작점
max_width=400#가로 최대치
def draw_text(screen,text,font,color,x,y,max_width):
words=text.split(' ');lines=[];current_line=''
for word in words:
test_line=current_line+(''if current_line==''else' ')+word
test_width,test_height=font.size(test_line)#텍스트의 가로 길이, 세로 길이
if test_width>max_width:
lines.append(current_line);current_line=word
else:current_line=test_line
lines.append(current_line)
for i,line in enumerate(lines):
line_screen=font.render(line,True,color)
screen.blit(line_screen,(x,y+i*(test_height+10)))
"""
바로 윗 코드(18번째 줄)에서 test_height+10 이 부분이 줄바꿈 크기만큼 줄넘김,
값을 증가시키면 txt와 txt 사이의 거리가 멀어짐을 알 수 있다.
"""
def main():
pygame.init();screen=pygame.display.set_mode((screenw,screenh))
pygame.display.set_caption("text_wrapping")
font=pygame.font.SysFont('hy견고딕',30,False,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)
draw_text(screen,text,font,WHITE,x,y,max_width)
pygame.display.update()
clock.tick(FPS)
if __name__=="__main__":
main()
왼쪽이 코드를 실행시 나타나는 창이다. max_width로 텍스트의 가로 길이를 설정하고 y+i*(test_height+10)에서 test_height+10으로 텍스트의 개행문자 길이를 설정할 수 있다. 위의 이미지를 보면 \n를 텍스트에 넣어도 ▯만 표시되고 줄넘김도 안되는걸 알 수 있다. |
두 번째 방법은 text에 개행문자를 넣으면 개행문자를 감지해 개행문자를 기준으로 텍스트를 나누어 출력하는 방식이다.
import pygame,sys
LIGHT_GRAY=(200,200,200)
screenw,screenh,FPS=400,300,80
text="Hello, World!\nThis is multiline text.\nPygame handles it manually."
x_pos,y_pos=50,50
WHITE=(255,255,255)
def draw_text(screen,text,font,x,y,color):
#lines=['Hello, World!', 'This is multiline text.', 'Pygame handles it manually.']
lines=text.split('\n')#개행문자를 기준으로 텍스트를 여러 줄로 분리
for line in lines:
#개행문자를 대신하기 위한 폰트의 세로 길이 얻어오기
_,test_height=font.size(line)
rendered_text=font.render(line,True,color)
screen.blit(rendered_text,(x, y))#텍스트 화면에 출력
y+=test_height+10#줄 간격 조정(15번째 줄)
def main():
pygame.init()
screen=pygame.display.set_mode((screenw, screenh))
pygame.display.set_caption("text_wrapping2")
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)
draw_text(screen,text,font,x_pos,y_pos,WHITE)
pygame.display.update()
clock.tick(FPS)
if __name__ == "__main__":
main()
왼쪽이 코드를 실행시 나타나는 창이다. 코드는 \n을 감지하여 이를 기준으로 문자열을 나누고 15번째 줄의 test_height+10으로 텍스트의 개행문자 길이를 설정할 수 있다. test_height+30 이런식으로 하면 텍스트 간의 간격이 늘어나는 것을 볼 수 있다. |
첫 번째 방법의 경우 어느 채팅 프레임을 만들고 그 안에 텍스트를 넣어야한다면 이용하는 것이 좋을 것이라 생각되고
두 번째 방법의 경우 간단하게 텍스트를 띄울때에 쓰는 용도로 사용하면 될 것이라 생각한다.
첫 번째 방법 사용 예시 |
'python study > import pygame' 카테고리의 다른 글
python) pygame,키보드 처리(대소문자 처리) (2) (0) | 2024.12.28 |
---|---|
python) pygame,키보드 처리 (1) (0) | 2024.12.27 |
python)pygame, font(+한글 띄우기) 텍스트 띄우기(1) (0) | 2024.12.26 |
python)pygame에서 동적 그림 처리, 제대로 이해하기 (0) | 2024.12.25 |
python)pygame에서 그림이 그려지는 순서, 제대로 이해하기 (0) | 2024.12.23 |