[python] Pygame에서 카메라 이동 구현하기

Pygame은 2D 게임을 개발하기 위한 파이썬 라이브러리입니다. 이 라이브러리를 사용하여 게임에서 카메라 이동 기능을 구현하는 방법을 알아보겠습니다.

카메라 클래스 만들기

먼저, 카메라를 나타내는 Camera 클래스를 만들어야 합니다. 이 클래스는 카메라의 위치와 화면을 이동시킬 offset 값을 가지고 있습니다.

class Camera:
    def __init__(self, width, height):
        self.width = width
        self.height = height
        self.offset = [0, 0]

    def apply(self, position):
        return [position[0] + self.offset[0], position[1] + self.offset[1]]

    def update(self, target):
        self.offset[0] += (target[0] - self.offset[0] - self.width/2) * 0.1
        self.offset[1] += (target[1] - self.offset[1] - self.height/2) * 0.1

위의 코드에서 __init__ 함수는 카메라의 너비와 높이를 초기화하고, offset을 [0, 0]으로 설정합니다. apply 함수는 입력된 위치를 현재 offset 값과 함께 반환하여 실제 화면에서 위치를 설정합니다. update 함수는 타겟의 위치를 받아와서 카메라의 offset 값을 조정하여 화면을 움직입니다.

카메라 사용하기

이제 위에서 만든 Camera 클래스를 사용하여 카메라 이동 기능을 구현할 수 있습니다. 먼저, 화면을 초기화하고 카메라 객체를 생성합니다.

import pygame

pygame.init()

width, height = 800, 600
screen = pygame.display.set_mode((width, height))

camera = Camera(width, height)

다음으로, 게임 루프를 실행하는 부분에서 카메라의 update 함수를 호출하여 매 프레임마다 카메라가 따라가야 할 타겟의 위치를 업데이트합니다. 화면에 그려질 객체들의 위치를 카메라의 apply 함수를 사용하여 변환한 후, 실제로 화면에 그립니다.

while True:
    target = [player.x, player.y]
    camera.update(target)

    # 화면에 그려질 객체들의 위치를 카메라에 맞게 변환
    transformed_position = camera.apply(object.position)

    # 변환된 위치에 객체를 그림
    pygame.draw.rect(screen, (255, 0, 0), pygame.Rect(transformed_position[0], transformed_position[1], object.width, object.height))

    pygame.display.flip()

위의 코드에서 target 변수는 카메라가 따라갈 타겟의 위치를 입력받아옵니다. camera.update 함수를 호출하여 카메라의 offset 값을 업데이트한 후, camera.apply 함수를 사용하여 그려질 객체들의 위치를 변환합니다. 변환된 위치에 객체를 그리기 위해 pygame.draw.rect 함수를 사용합니다.

마무리

이제 Pygame을 사용하여 카메라 이동 기능을 구현하는 방법을 알아보았습니다. 이를 활용하여 게임에서 사운드효과나 애니메이션 등을 자연스럽게 구현할 수 있습니다. Pygame 공식 문서와 예제 코드를 참고하여 더 많은 기능을 익혀 보세요.

참고 자료