수색…


통사론

  • pygame.draw.rect (Surface, color, Rect, width = 0)
  • pygame.draw.polygon (표면, 색상, 포인트 목록, 너비 = 0)
  • pygame.draw.circle (표면, 색상, 위치, 반지름, 너비 = 0)
  • pygame.draw.ellipse (Surface, color, Rect, width = 0)
  • pygame.draw.arc (Surface, color, Rect, start_angle, stop_angle, width = 1)
  • pygame.draw.line (표면, 색상, 시작점, 끝점, 폭 = 1)
  • pygame.draw.lines (표면, 색상, 닫힘, 포인트리스트, 너비 = 1)
  • pygame.draw.aaline (Surface, color, startpos, endpos, blend = 1)
  • pygame.draw.aalines (표면, 색상, 닫힘, 포인트리스트, 블렌드 = 1)

매개 변수

매개 변수 세부
표면 도형을 그릴면.
색깔 빨간색, 녹색 및 파란색 (및 알파)을 나타내는 3 또는 4 정수 시퀀스이며 각 값은 0-255 사이입니다.
직사각형 도형이 그려지는 직사각형 영역입니다.
선의 너비입니다. width = 0 인 경우 도형이 채워집니다.
포인트리스트 임의의 양의 점 / 꼭짓점 목록 (픽셀 (x, y))입니다.
pos 원의 중심 위치 (픽셀 단위)입니다 (x, y).
반지름 원의 반경 (픽셀 단위)입니다.
닫은 true 인 경우 마지막 점과 첫 번째 점 사이의 선이 그려져 도형이 닫힙니다.
블렌드 = 1 true 인 경우, 쉐이드는 기존의 픽셀 쉐이드와 겹쳐 쓰지 않고 블렌드됩니다.
start_angle 원호의 초기 각도입니다 (라디안 단위).
stop_angle 호의 최종 각도입니다 (라디안 단위).
start_pos 선의 시작 위치 (픽셀 단위)입니다.
end_pos 선의 끝 위치 (픽셀 단위)입니다.

그리기 모듈로 그리기

파이 게임에는 표면에 직접 셰이프를 그릴 수있는 함수가 들어있는 pygame.draw 모듈이 있습니다.

기능 기술
pygame.draw.rect 직사각형 모양을 그리다.
pygame.draw.polygon 여러면을 가진 모양을 그리시오.
pygame.draw.circle 점 둘레에 원을 그린다.
pygame.draw.ellipse 직사각형 안에 둥근 모양을 그리시오.
pygame.draw.arc 타원의 부분 부분 그리기
pygame.draw.line 직선을 그린다.
pygame.draw.lines 연속 된 여러 선분 그리기
pygame.draw.aaline 훌륭한 안티 앨리어스 라인을 그려라.
pygame.draw.aalines 연결된 에일 리어 징 제거 된 선을 긋는다.

모듈 사용 방법

모듈을 사용하려면 먼저 파이 게임을 가져 와서 초기화하고 디스플레이 모드를 설정해야합니다. 색상 상수를 미리 정의하여 코드를보다 읽기 쉽고 아름답게 만드는 것이 편리합니다. 모든 함수는 Pygame Rect 또는 2 요소 정수 / float 시퀀스 ( pygame.draw.circle 은 정의되지 않은 이유로 만 정수를 취합니다) 인 색상 및 위치 인수를 그릴 Surface를 사용합니다.

아래의 코드는 모든 다른 기능, 사용 방법 및 모양을 보여줍니다. 예제 전에 파이 게임을 초기화하고 몇 가지 상수를 정의합니다.

import pygame
from math import pi
pygame.init()

screen = pygame.display.set_mode((100, 100))
WHITE = pygame.Color(255, 255, 255)
RED = pygame.Color(255, 0, 0) 

검은 색은 서페이스의 기본 색으로 그려지지 않은 서페이스의 부분을 나타냅니다. 각 기능의 매개 변수는 아래의 매개 변수 에서 설명합니다.

직사각형

size = (50, 50)

rect_border = pygame.Surface(size)  # Create a Surface to draw on.
pygame.draw.rect(rect_border, RED, rect_border.get_rect(), 10)  # Draw on it.

rect_filled = pygame.Surface(size)
pygame.draw.rect(rect_filled, RED, rect_filled.get_rect())   

여기에 이미지 설명을 입력하십시오.

다각형

size = (50, 50)
points = [(25, 0), (50, 25), (25, 50), (0, 25)]  # The corner points of the polygon.

polygon = pygame.Surface(size)
pygame.draw.polygon(polygon, RED, points, 10)

polygon_filled = pygame.Surface(size)
pygame.draw.polygon(polygon_filled, RED, points)

여기에 이미지 설명을 입력하십시오.

size = (50, 50)
radius = 25

circle = pygame.Surface(size)
pygame.draw.circle(circle, RED, (radius, radius), radius, 10)  # Position is the center of the circle.

circle_filled = pygame.Surface(size)
pygame.draw.circle(circle_filled, RED, (radius, radius), radius)

구멍은 파이 게임의 그리기 알고리즘의 불행한 결과입니다.

여기에 이미지 설명을 입력하십시오.

타원

size = (50, 25)  # Minimize it's height so it doesn't look like a circle.

ellipse = pygame.Surface(size)  
pygame.draw.ellipse(ellipse, RED, ellipse.get_rect(), 5)

ellipse_filled = pygame.Surface(size)
pygame.draw.ellipse(ellipse_filled, RED, ellipse.get_rect())

구멍은 파이 게임의 그리기 알고리즘의 불행한 결과입니다.

여기에 이미지 설명을 입력하십시오.

size = (50, 50)

arc = pygame.Surface(size)
pygame.draw.arc(arc, RED, arc.get_rect(), 0, pi)  # 0 to pi is 180° creating a half circle.

여기에 이미지 설명을 입력하십시오.

size = (50, 50)

line = pygame.Surface(size)
pygame.draw.line(line, RED, (0, 0), (50, 50))  # Start at topleft and ends at bottomright.

여기에 이미지 설명을 입력하십시오.

윤곽

size = (50, 50)
points = [(25, 0), (50, 25), (25, 50), (0, 25)]

lines = pygame.Surface(size)
pygame.draw.lines(lines, RED, False, points)

lines_closed = pygame.Surface(size)
pygame.draw.lines(lines_closed, RED, True, points)

여기에 이미지 설명을 입력하십시오.

안티 앨리어스 라인

size = (50, 50)

antialiased_line = pygame.Surface(size)
pygame.draw.aaline(antialiased_line, RED, (0, 0), (50, 50))

여기에 이미지 설명을 입력하십시오.

앤티 엘리 어싱 된 라인

size = (50, 50)
points = [(25, 0), (50, 25), (25, 50), (0, 25)]

antialiased_lines = pygame.Surface(size)
pygame.draw.aalines(antialiased_lines, RED, False, points)

antialiased_lines_closed = pygame.Surface(size)
pygame.draw.aalines(antialiased_lines_closed, RED, True, points)

여기에 이미지 설명을 입력하십시오.

그것을 밖으로 시도하십시오

직접 해보기 : 위의 코드 스 니펫 중 하나와 아래 코드를 빈 파일에 복사하고 이름 이미지 를 blit 및 실험하려는 곡면 이름으로 변경하십시오.

import pygame
from math import pi
pygame.init()

screen = pygame.display.set_mode((100, 100))
WHITE = pygame.Color(255, 255, 255)
RED = pygame.Color(255, 0, 0) 

# But code snippet here

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            quit()
    
    screen.blit(image, (25, 25))
    pygame.display.update()

표면들

파이 게임에서는 대개 표면을 사용하여 객체의 모양을 나타내고 직사각형은 위치를 나타냅니다. 표면은 색상이나 이미지가 포함 된 빈 종이와 같습니다. 서페이스를 만드는 방법에는 두 가지가 있습니다 : 처음부터 비워 두거나 이미지를로드하는 것입니다.

표면 만들기

Surface를 만들려면 크기가 최소한이어야합니다. 크기는 픽셀 단위로 나타내는 너비와 높이의 2 요소 정수 시퀀스입니다.

Surface를 생성 할 때 비트 심도, 마스크 및 픽셀 당 추가 기능을 제어하거나 비디오 메모리에 이미지를 생성하기 위해 추가 인수를 전달할 수도 있습니다. 이것은이 예제의 범위를 벗어납니다.

size = width, height = (32, 32)
empty_surface = pygame.Surface(size)

pygame.draw 모듈을 사용하여 Surface에 도형을 그리거나 Surface 메서드 fill(color) 를 호출하여 색상으로 fill(color) 있습니다. 인수 color 는 3 또는 4 요소 정수 시퀀스 또는 pygame.Color 객체입니다.

이미지로드

게임에서 자신의 이미지 (스프라이트라고 함)를 사용하고 싶을 때가 많습니다. 이미지를 사용하여 서페이스를 만드는 것은 다음과 같이 쉽습니다.

my_image = pygame.image.load(path_to_image)

이미지의 경로는 상대적이거나 절대적 일 수 있습니다. 성능을 향상 시키려면 일반적으로 이미지를 화면과 동일한 픽셀 형식으로 변환하는 것이 좋습니다. 이는 Surface 메소드 convert() 를 호출하여 수행 할 수 있습니다.

my_image = pygame.image.load(path_to_image).convert()

이미지에 투명도 (알파 값)가있는 경우 대신 convert_alpha() 메서드를 호출하면됩니다.

my_image = pygame.image.load(path_to_image).convert_alpha()

블리 팅

화면을 표시하려면 화면이 화면에 블리트되어야합니다. 블리 팅이란 한 표면에서 다른 표면으로 픽셀을 복사하는 것을 의미합니다 (화면은 표면이기도합니다). 또한 Surface의 위치를 ​​전달해야합니다. Surface는 2 요소 정수 시퀀스 또는 Rect 객체 여야합니다. 서피스의 최상단이 그 위치에 놓입니다.

screen.blit(my_image, (0, 0))
pygame.display.update()  # or pygame.display.flip()

화면이 아닌 다른 서페이스로 blit하는 것이 가능합니다. 화면에 blitted 된 것을 표시하려면 pygame.display.update() 또는 pygame.display.flip() 을 호출해야합니다.

투명도

파이 게임에서 지원되는 투명도의 종류는 3 가지입니다 : 컬러 키, 서페이스 알파 및 픽셀 별 알파.

컬러 키

색상을 완전히 투명하게 만들거나보다 정확하게 만들어 색상을 단순히 블리트가되지 않게 만듭니다. 내부에 검은 색 직사각형이있는 이미지가있는 경우 검정색이 블리 트되지 않도록 컬러 키를 설정할 수 있습니다.

BLACK = (0, 0, 0)
my_image.set_colorkey(BLACK)  # Black colors will not be blit.

서페이스는 하나의 색상 키만 가질 수 있습니다. 다른 색상 키를 설정하면 이전 색상을 덮어 씁니다. 컬러 키는 다른 알파 값을 가질 수 없으며, 색상을 보이지 않게 할 수 있습니다.

여기에 이미지 설명을 입력하십시오.

표면 알파

전체 Surface를 알파 값으로 투명하게 만듭니다. 이 방법을 사용하면 다른 알파 값을 가질 수 있지만 전체 표면에 영향을 미칩니다.

my_image.set_alpha(100)  # 0 is fully transparent and 255 fully opaque.

여기에 이미지 설명을 입력하십시오.

픽셀 별 알파

Surface의 모든 픽셀을 개별 알파 값으로 투명하게 만듭니다. 이것은 당신에게 가장 자유와 유연성을 제공하지만 또한 가장 느린 방법입니다. 이 방법은 또한 Surface를 픽셀 당 알파 표면으로 생성해야하며 색상 인수는 네 번째 알파 정수를 포함해야합니다.

size = width, height = (32, 32)
my_image = pygame.Surface(size, pygame.SRCALPHA)  # Creates an empty per-pixel alpha Surface.

Color가 네 번째 알파 값을 포함하고 있으면 Surface가 투명도를 그립니다.

BLUE = (0, 0, 255, 255)
pygame.draw.rect(my_image, BLUE, my_image.get_rect(), 10)

다른 곡면과 달리이 곡면 기본 색상은 검은 색이 아니라 투명합니다. 그래서 검은 색 사각형이 사라집니다.

여기에 이미지 설명을 입력하십시오.

색상환 및 표면 알파 결합

Colorkeys와 Surface alphas는 결합 될 수 있지만 픽셀 별 알파는 결합 될 수 없습니다. 이것은 픽셀 당 표면의 성능이 저하되는 것을 원하지 않는 경우에 유용 할 수 있습니다.

purple_image.set_colorkey(BLACK)
purple_image.set_alpha(50)

여기에 이미지 설명을 입력하십시오.

전체 코드

이것을 빈 파일에 복사하고 실행하십시오. 1, 2, 3 또는 4 건반을 눌러 이미지를 나타냅니다. 2, 3 또는 4를 여러 번 눌러 더 불투명하게하십시오.

import pygame
pygame.init()

WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255, 50)  # This color contains an extra integer. It's the alpha value.
PURPLE = (255, 0, 255)

screen = pygame.display.set_mode((200, 325))
screen.fill(WHITE)  # Make the background white. Remember that the screen is a Surface!
clock = pygame.time.Clock()

size = (50, 50)
red_image = pygame.Surface(size)
green_image = pygame.Surface(size)
blue_image = pygame.Surface(size, pygame.SRCALPHA)  # Contains a flag telling pygame that the Surface is per-pixel alpha
purple_image = pygame.Surface(size)

red_image.set_colorkey(BLACK)
green_image.set_alpha(50)
# For the 'blue_image' it's the alpha value of the color that's been drawn to each pixel that determines transparency.
purple_image.set_colorkey(BLACK)
purple_image.set_alpha(50)

pygame.draw.rect(red_image, RED, red_image.get_rect(), 10)
pygame.draw.rect(green_image, GREEN, green_image.get_rect(), 10)
pygame.draw.rect(blue_image, BLUE, blue_image.get_rect(), 10)
pygame.draw.rect(purple_image, PURPLE, purple_image.get_rect(), 10)

while True:
    clock.tick(60)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            quit()
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_1:
                screen.blit(red_image, (75, 25))
            elif event.key == pygame.K_2:
                screen.blit(green_image, (75, 100))
            elif event.key == pygame.K_3:
                screen.blit(blue_image, (75, 175))
            elif event.key == pygame.K_4:
                screen.blit(purple_image, (75, 250))

    pygame.display.update()


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow