파이게임 get_rect 메서드

Salman Mehmood 2023년6월21일
  1. Python에서 Pygame의 get_rect 메서드 사용
  2. Pygame get_rect 사용 시 중복 이미지에 대한 솔루션
파이게임 get_rect 메서드

이 기사의 주요 목표는 Pygame 라이브러리의 get_rect() 메서드를 사용하여 이미지를 조작하고 화면에서 이미지를 이동하는 방법을 보여주는 것입니다.

Python에서 Pygame의 get_rect 메서드 사용

파이게임에서 프로젝트나 게임을 작업하는 동안 화면에서 이미지의 위치를 조작할 수 있어야 합니다. 예를 들어 플레이어를 화면에서 이동하려면 플레이어가 특정 버튼을 누를 때 화면에서 위치를 변경해야 합니다.

다음 예를 고려하십시오.

import pygame
import sys
from pygame.locals import *

pygame.init()

# Set up the window
WIN = pygame.display.set_mode((400, 400))

# Load two images
imgOne = pygame.image.load("images\\img 1.jpg")
imgTwo = pygame.image.load("images\\img 2.jpg")

# Fill bg with black color
WIN.fill((0, 0, 0))

# Place the images
WIN.blit(imgOne, (0, 0))
WIN.blit(imgTwo, (300, 0))

pygame.display.update()

# Obtain the rectangle for each image
imgOneRect = imgOne.get_rect()
imgTwoRect = imgTwo.get_rect()

imgTwoRect.x = imgOneRect.x
imgTwoRect.y = imgOneRect.y

WIN.blit(imgTwo, (imgTwoRect.x, imgTwoRect.y))
pygame.display.update()

while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()

두 이미지가 로드될 때 출력:

문제 플롯 - 이미지 로드

오른쪽 이미지 위로 두 번째(파란색) 이미지를 이동한 후 출력:

문제 플롯 - 이미지 이동

위의 이미지에서 볼 수 있듯이 파란색 이미지를 첫 번째 이미지 위로 이동하려고 합니다. 원하는 입력을 받는 대신 파란색 이미지가 “복제"되고 빨간색 이미지 위로 완전히 이동하는 대신 원래 위치에 있는 것을 볼 수 있습니다.

파란색 이미지가 “중복"되지 않도록 이 문제를 어떻게 해결할 수 있는지 살펴보겠습니다.

Pygame get_rect 사용 시 중복 이미지에 대한 솔루션

다음 코드를 고려하십시오.

import pygame
import sys
import time
from pygame.locals import *

pygame.init()

# Set up the window
WIN = pygame.display.set_mode((400, 400))

# Load two images
imgOne = pygame.image.load("images\\img 1.jpg")
imgTwo = pygame.image.load("images\\img 2.jpg")

# Fill bg with black color
WIN.fill((0, 0, 0))

# Place the images
WIN.blit(imgOne, (0, 0))
WIN.blit(imgTwo, (300, 0))

pygame.display.update()

# Make a rect of the size of the image
# set its top-left coords to (300, 0).
img2_rect = imgTwo.get_rect(topleft=(300, 0))

# Set the rect's x value to 0 (x value of red image)
img2_rect.x = 0

# Wait for two seconds
time.sleep(2)

# Redraw the background as a black color
WIN.fill((0, 0, 0))

# Draw the image (blue image) at the coordinates of the rect
WIN.blit(imgTwo, img2_rect)

# Update the screen to show newly drawn images
pygame.display.update()

while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()

두 이미지를 로드한 후 출력:

솔루션 - 이미지 로드

빨간색 이미지 위에 파란색 이미지를 이동한 후의 출력:

솔루션 - 이미지 이동

이를 달성하기 위한 주요 아이디어는 get_rect 메서드를 사용하여 rect를 생성하는 것입니다.

사각형의 초기 위치는 (0,0)입니다. 이동하려는 이미지의 위치에 설정해야 합니다.

사각형을 초기화한 후 이미지를 원하는 위치로 사각형의 위치를 변경합니다. 그런 다음 이미지의 배경을 다시 그려 이전 이미지 인스턴스가 화면 인스턴스에서 제거되도록 합니다.

배경이 그려지면 blit 메서드를 호출하고 이전에 만든 이미지와 사각형에 전달하여 원하는 위치에 이미지를 그릴 수 있습니다. 이미지는 rect의 좌표에 생성됩니다.

프로그램의 전체 워크플로는 다음과 같습니다.

  1. init 메서드를 사용하여 파이게임을 초기화합니다.

  2. display.set_mode를 호출하여 창을 설정합니다. 일반적으로 화면 크기를 구성하고 일부 플래그 및 색심도를 조정하는 데 사용됩니다.

  3. 로드를 사용하여 두 이미지를 로드합니다.

  4. 원하는 색상으로 배경을 채웁니다. 이 경우 배경은 검은색 (0,0,0)의 r,g,b 표현을 사용하여 검은색으로 설정되었습니다.

  5. x 및 y 좌표를 전달해야 하는 blit을 사용하여 화면에 이미지를 그립니다. 일반적으로 튜플 형태로 제공됩니다.

  6. 업데이트 방법을 사용하여 화면을 새로 고치고 캔버스/화면에 대한 새로운 변경 사항을 표시합니다. 이 경우 배경을 검은색으로 채우고 로드된 두 이미지를 표시합니다.

  7. get_rect 메서드를 사용하여 rect를 만들고 좌표 튜플을 전달하여 초기 위치를 설정합니다. 그렇지 않으면 일반적으로 (0,0) 위치가 지정됩니다.

    이 경우 사각형의 위치를 이동하려는 이미지(파란색 이미지)의 위치로 설정합니다.

  8. 사각형의 위치를 설정하려는 새 위치로 업데이트합니다. 일반적으로 이미지를 이동하려는 위치로 설정합니다.

    이 경우 x 좌표는 첫 번째(빨간색) 이미지의 x 좌표로 설정되었습니다.

  9. 지연 후 변경 사항을 보려면 몇 초 동안 기다리십시오. 이때 대기시간은 2초로 설정하였다.

  10. 이미지의 배경을 다시 그립니다. 이는 “제거"해야 하는 이전 이미지 인스턴스/픽셀을 배경으로 덮어쓰도록 하기 위해 수행됩니다. 이 경우 검은색으로 설정되었습니다.

  11. 배경을 그린 후 원하는 위치에 옮기고자 하는 이미지를 그립니다. 이것은 blit 방법을 사용하여 수행됩니다.

    이 경우 두 개의 매개변수가 전달됩니다. 첫 번째는 그려야 할 이미지이고 두 번째는 이전에 만든 직사각형입니다.

    직사각형은 화면에 그려질 위치를 이미지에 제공합니다. 위치는 일반적으로 x-y 좌표 형식입니다.

  12. 이미지 이동, 배경 다시 그리기 및 화면에 반영과 같은 위에서 수행한 모든 변경 사항을 확인하기 위해 pygame.display.update 함수를 호출합니다.

  13. 마지막 무한 루프는 수동으로 닫힐 때까지 창을 계속 실행합니다. 각 이벤트는 pygame.event.get 메서드를 사용하여 가져온 다음 이벤트 유형에 따라 작업이 수행됩니다.

    일반적으로 키 입력을 캡처하려는 경우 여기에서도 수행됩니다. “메인 루프"라고도 합니다.

Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn

관련 문장 - Pygame Image