공통)
screen: 표시할 화면
color: 표시할 도형 및 선의 색상 / tuple (R,G,B)로 지정
width(기본값은 1(안써도 됨)): 선의 두께를 나타내는 값으로 고정 값임
outline_width(기본값은 0(안써도 됨)): 테두리의 두께를 나타내는 값으로 0이면 주어진 color로 사각형 내부를 채운 형태가 되고 outline_width>0이면 그 크기만큼 외각선이 color 색상으로 나타남
1) 선
pygame.draw.line(screen,color,start_pos,end_pos,width=1)
start_pos: [x1,y1]라고 하면 시작점
end_pos: [x2,y2]라고 하면 끝점
2) 여러 선
pygame.draw.lines(screen,color,closed,poslist,width=1)
closed: True, False일때로 나뉘며 True이면 처음점과 끝점을 잇고 False면 처음점과 끝점을 잇지 않는다.
poslist: [(x1,y1),(x2,y2), ㆍ ㆍ ]형태로 리스트의 첫 번째 좌표에서 시작하여, 두 번째 좌표로 선이 그어지고, 그다음 좌표로 이어지는 형태이다.
3) 부드러운 선
pygame.draw.aaline(screen,color,start_pos,end_pos,width=1)
start_pos: [x1,y1]라고 하면 시작점
end_pos: [x2,y2]라고 하면 끝점
4) 부드러운 여러 선
pygame.draw.aalines(screen,color,closed,poslist,width=1)
closed: True, False일때로 나뉘며 True이면 처음점과 끝점을 잇고 False면 처음점과 끝점을 잇지 않는다.
poslist: [(x1,y1),(x2,y2), ㆍ ㆍ ]형태로 리스트의 첫 번째 좌표에서 시작하여, 두 번째 좌표로 선이 그어지고, 그다음 좌표로 이어지는 형태이다.
5) 원
pygame.draw.circle(screen,color,(x,y),radius, outline_width=0)
(x,y): 표시할 원의 중심이 x,y이다.
radius: 원의 반지름
6) 원호/부채꼴
pygame.draw.arc(screen,color,(x,y,w,h),start_angle, stop_angle,outline_width=0)
(x,y,w,h): 표시할 원호의 외각을 사각형이라 하면 그 안의 원호의 위치인 왼쪽 위 꼭짓점의x,y 좌표와 사각형의 높이인 h, 사각형의 너비인 w
start_angle:그려질 처음 각도
stop_angle: start_angle에서 시작해 stop_angle까지 원호가 그려짐
pygame에서 각도는 라디안 체제임 그래서 start_angle와 stop_angle는 라디안 단위로 설정해야함
import math를 위에 해주어야 𝝅사용 가능 math.pi가 𝝅임
단, 다른 함수와 달리 도형이 완벽히 그려지지 않는 문제가 있음
polygon함수와 math의 sin,cos을 응용하는 것으로 대체 가능
7) 타원
pygame.draw.ellipse(screen,color,(x,y,w,h),outline_width=0)
(x,y,w,h): 표시할 타원의 외각을 사각형이라 하면 그 안의 타원의 위치인 왼쪽 위 꼭짓점의x,y 좌표와 사각형의 높이인 h, 사각형의 너비인 w
8) 삼각형
pygame.draw.polygon(screen,color,((x1,y1),(x2,y2),(x3,y3)),outline_width=0)
((x1,y1),(x2,y2),(x3,y3)): 삼각형의 세 점의 좌표
9)사각형
pygame.draw.rect(screen,color,(x,y,w,h),outline_width=0)
(x,y,w,h): 표시할 사각형의 위치인 왼쪽 위 꼭짓점의x,y 좌표와 사각형의 높이인 h, 사각형의 너비인 w
번외) 도형 반투명하게 띄우기
pygame.Surface((w,h),pygame.SRCALPHA)를 사용
shape_variable=pygame.Surface((200, 150), pygame.SRCALPHA)
shape_variable.set_alpha(128) # 투명도 설정 (0: 완전히 투명, 255: 불투명)
pygame.draw.rect(shape_variable,blue,(50, 50, 100, 50))
pygame.draw.circle(shape_variable,(255, 0, 0),(150, 100),40)
이런식으로 surface로 생성하는 표면의 w,h는 최소한 그 안에 그릴 도형의 크기를 수용할 크기가 되어야함
Tip1) screen에 따른 동적 크기 계산
pygame으로 실제 게임을 만든다면 도형을 그리는 것의 경우 screen=pygame.display.set_mode((screenw, screenh))으로 미리 설정한 screenw, screenh가 언제 바뀔지 모르기에 그릴 위치를 screenw, screenh 이 두 변수를 적극 활용 하는 것이 좋음
예시 코드:
pygame.draw.rect(screen,SKILL_BACKGROUND_COLOR,(0,0,screenw//2,screenh))
pygame.draw.rect(screen,SKILL_BACKGROUND_COLOR,(screenw//2,0,screenw//2,screenh))
pygame.draw.polygon(screen,GRAY,[[uiw,screenh-uih],[uiw,screenh],[uiw+uipol,screenh]],0)
Tip2) pygame.draw.line VS pygame.draw.aaline
pygame.draw.aaline는 안티앨리어싱을 적용해 계단 현상이 덜함
pygame.draw.line는 안티앨리어싱을 적용하지 않아 계단 현상이 보임
이는 선을 대각선으로 띄우면 두드러짐
즉 이는 line가 aaline보다는 그리는 속도가 상대적으로 더 빠르기에 성능이 중요하다면 더 적합함
TMI)이 글 쓴 목적
한국어로 된 pygame.draw 도형류에 대해 그냥 기능에 대해서만 단백하게 다룬 글이 없어서 적게 됨(예제가 또 많으면 나중에 보기 불편함)
'python study > import pygame' 카테고리의 다른 글
python)pygame, font(+개행문자 문제 해결 방법) 텍스트 띄우기(2) (0) | 2024.12.27 |
---|---|
python)pygame, font(+한글 띄우기) 텍스트 띄우기(1) (0) | 2024.12.26 |
python)pygame에서 동적 그림 처리, 제대로 이해하기 (0) | 2024.12.25 |
python)pygame에서 그림이 그려지는 순서, 제대로 이해하기 (0) | 2024.12.23 |
python)pygame 좌표계의 특성과 컴퓨터 화면 스캔 방식 이해 (0) | 2024.12.23 |