Draw line, rectangle, circle, polygon, ellipse 그리기
페이지정보
글쓴이 관리자 조회 38,552 조회 날짜 20-02-27 15:52 / U:20-02-27 21:38내용
Draw line, rectangle, circle, polygon, ellipse 그리기
pygame의 draw 모듈을 이용하여 다양한 도형을 그릴 수 있다.
draw에 의해 생성되는 모형은 모두 Rect이다. 따라서 Rect의 가상 속성값을 모두 가지고 있다.
참고 : https://www.jbmpa.com/pygame/4
* SCREEN은 본 강좌에서 사용하는 Surface이다. 그리고 색상 상수는 아래처럼 미리 선언한다고 가정한다.
BLACK = (0, 0, 0) RED = (255, 0, 0) GREEN= (0, 255, 0) BLUE = (0, 0, 255) |
1. 선 그리기(line)
pygame.draw.line(SCREEN, color, start_pos, end_pos, width=1) -> Rect
line() 메서드는 출발점에서 도착점까지 선을 그어준다.
width를 명시하지 않으면 굵기는 1이 된다.
좌표값은 튜플 또는 리스트로 입력가능하다.
예제 코드
pygame.draw.line(SCREEN, RED, (100, 50), (200, 150), 5) pygame.draw.line(SCREEN, GREEN, [200, 300], [100, 150], 10) pygame.draw.line(SCREEN, BLUE, [300, 300], [200, 250]) |
2. 여러 개의 선 그리기
pygame.draw.lines(SCREEN, color, closed, points, width=1) -> Rect
lines() 메서드는 입력한 여러 개의 좌표를 순서대로 이어준다. 여러 개의 좌표(points)는 튜플 또는 리스트로 작성한다.
closed 속성을 True로 하면 첫좌표와 끝좌표가 이어져서 하나의 닫힌 도형이 되고, False로 하면 끝좌표는 서로 이어지지 않아 열린 도형이 된다.
예제 코드
pygame.draw.lines(SCREEN, RED, False, [(100, 80), (150, 90), (200, 80), (220, 30)], 5) pygame.draw.lines(SCREEN, BLUE, True, [[50, 380], [350, 190], [200, 180], [150, 130]], 5) |
3. 부드러운 선 그리기
pygame.draw.aaline(SCREEN, color, start_pos, end_pos, blend=1) -> Rect
부드러운 선 그리기는 안티알리어싱을 적용한 선그리기이다. blend가 1 또는 True이면 안티알리어싱이 적용되고 0 또는 False이면 알리어싱이 적용된다. 안티알리어싱이 적용되면 pixel에 blur bit이 적용되어 선이 부드럽게 보인다.
aaline()은 선 굵기가 1만 적용된다.
예제 코드
pygame.draw.aaline(SCREEN, BLUE, (100, 150), (150, 180), False) pygame.draw.aaline(SCREEN, BLACK, [50, 400], [350, 280], True) |
4. 여러 개의 부드러운 선 그리기
pygame.draw.aaline(SCREEN, color, closed, points, blend=1) -> Rect
여러 개의 선 그리기와 마찬가지로 여러 개의 좌표를 순서대로 이어준다.
예제 코드
pygame.draw.aalines(SCREEN, RED, False, [(80, 480), (250, 390), (270, 380), (220, 130)], True) pygame.draw.aalines(SCREEN, BLACK, True, [[150, 380], [190, 150], [370, 380], [390, 150]], True) |
5. 사각형 그리기
pygame.draw.rect(SCREEN, color, rect, width=0) -> Rect
rect() 메서드는 Rect를 통해 topleft 좌표를 기준으로 가로, 세로 길이를 가진 사각형을 그린다. width는 선의 굵기이며, width 값이 0이 되면 도형 안을 같은 color로 채워준다.
예제 코드
pygame.draw.rect(SCREEN, BLACK, (55, 50, 250, 120), 2) pygame.draw.rect(SCREEN, RED, [55, 210, 250, 220]) |
6. 다각형 그리기
pygame.draw.polygon(surface, color, points, width=0) -> Rect
polygon()메서드는 여러개의 선 그리기와 마찬가지로 poinsts를 순서대로 이어주는 도형을 만든다. width가 0이면 도형 안을 color로 채워준다.
예제 코드
pygame.draw.polygon(SCREEN, RED, [(200, 50), (150, 100), (250, 100)]) pygame.draw.polygon(SCREEN, BLACK, [[150, 150], [10, 200], [100, 300], [350, 250], [300, 200]], 5) |
7. 원 그리기
pygame.draw.circle(surface, color, center, radius, width=0) -> Rect
circle() 메서드는 중심점과 반지름을 통해 원을 그려준다.
예제 코드
pygame.draw.circle(SCREEN, RED, (100, 50), 40, 3) |
8. 타원 그리기
pygame.draw.ellipse(surface, color, rect, width=0) -> Rect
타원 그리기는 원 그리기와 원리가 다르다. 원은 중심점과 반지름을 통해 만들어지지만 타원은 사각형을 만들고, 그 사각형의 각 변에 닿는 원을 그린다. 따라서 argument로 rect값이 필요하다. 만약 rect가 정사각형이라면 타원은 원과 같아 진다.
예제 코드
pygame.draw.ellipse(SCREEN, RED, (100, 100, 150, 20), 2) |
예제 코드 - 사각형 추가
pygame.draw.ellipse(SCREEN, RED, (100, 100, 150, 20), 2) |
9. 전체 코드 예제 - 모두 주석처리하고 필요한 부분만 주석 해제하여 확인하면 된다.
import pygame
# 색상 상수 BLACK = (0, 0, 0)
# 스크린 전체 크기 지정 SCREEN_WIDTH = 400
pygame.init()
# 스크린 객체 저장
# FPS를 위한 Clock 생성 clock = pygame.time.Clock()
playing = True if event.type == pygame.QUIT:
SCREEN.fill(WHITE)
# 1. 선그리기 - 출발 x, y / 도착 x, y / 굵기
# 2. 여러 개의 선 그리기 - False 열린 도형, True 닫힌 도형
# 3. 부드러운 선 그리기 - True 안티 알리어싱
# 4. 부드러운 선 여러개 - 선 굵기는 기본 1
# 5. 사각형 그리기 - (x, y, width, height), 선굵기
# 6. 다각형 - x, y 좌표를 연결해줌
# 7. 원 그리기 - 색상, 중심점, 반지름, 선굵기( 없으면 꽉 채움, 0)
# 8. 타원 - 사각형을 그려주면 그 안에 타원이 들어감(x, y, width, height)
font_01 = pygame.font.SysFont("Arial", 30, True, False) text_title = font_01.render("Pygame draw test", True, BLACK)
pygame.display.flip()
|
댓글목록
댓글이 없습니다