Pygame으로 만드는 나만의 RPG 게임 2강 – 충돌 처리와 맵 경계 제한, 카메라 이동 구현

Pygame으로 만드는 나만의 RPG 게임 2강입니다!

1강에서는 간단한 배경 위에 캐릭터를 불러오고, 방향키로 이동할 수 있도록 만들었어요.

이번 강의에서는
– 캐릭터가 맵 밖으로 나가지 않도록 **맵 경계 충돌 처리**
– 맵이 화면보다 클 경우, **카메라가 캐릭터를 따라 이동**하는 기능을 구현해볼 거예요.

1. 맵 경계 충돌 처리

기존 코드에서 캐릭터가 화면 밖으로 나가버리는 문제가 있었죠. 아래처럼 if문으로 화면 밖 이동을 막을 수 있어요:

# 기존 위치 계산 후
if keys[pygame.K_LEFT]: x -= speed
if keys[pygame.K_RIGHT]: x += speed
if keys[pygame.K_UP]: y -= speed
if keys[pygame.K_DOWN]: y += speed

# 경계 제한
x = max(0, min(WIDTH - player.get_width(), x))
y = max(0, min(HEIGHT - player.get_height(), y))

이렇게 하면 캐릭터는 화면의 가장자리에서 더 이상 이동하지 않습니다.

2. 카메라 이동 개념 이해

맵이 화면보다 크다면, 캐릭터가 이동할 때마다 맵 전체를 움직이는 방식으로 **카메라를 따라다니는 효과**를 줄 수 있습니다.

우리가 볼 수 있는 영역은 실제 맵의 일부일 뿐이고, 캐릭터는 맵의 절대 좌표로 움직이며, 화면에는 그 일부만 그려집니다.

3. 카메라 이동 적용 예제 코드

import pygame
import os

pygame.init()

# 맵 전체 크기 (배경 이미지 크기와 같게 설정)
MAP_WIDTH, MAP_HEIGHT = 1600, 1200
WIDTH, HEIGHT = 800, 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("나만의 RPG")

bg = pygame.image.load(os.path.join("images", "background.png"))
player = pygame.image.load(os.path.join("images", "player.png"))

x, y = 100, 100
speed = 5
clock = pygame.time.Clock()
running = True

while running:
    dt = clock.tick(60)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]: x -= speed
    if keys[pygame.K_RIGHT]: x += speed
    if keys[pygame.K_UP]: y -= speed
    if keys[pygame.K_DOWN]: y += speed

    # 맵 바깥으로 나가지 않게
    x = max(0, min(MAP_WIDTH - player.get_width(), x))
    y = max(0, min(MAP_HEIGHT - player.get_height(), y))

    # 카메라 위치 계산 (플레이어 중심)
    cam_x = x - WIDTH // 2
    cam_y = y - HEIGHT // 2

    # 카메라가 맵을 벗어나지 않게
    cam_x = max(0, min(MAP_WIDTH - WIDTH, cam_x))
    cam_y = max(0, min(MAP_HEIGHT - HEIGHT, cam_y))

    # 화면 그리기
    screen.blit(bg, (-cam_x, -cam_y))
    screen.blit(player, (x - cam_x, y - cam_y))
    pygame.display.update()

pygame.quit()

4. 결과

– 맵이 더 넓어졌고
– 캐릭터가 화면 중앙에 오도록 따라다니고
– 맵 끝에 도달하면 더 이상 움직이지 않습니다.

> 이 기능은 RPG의 ‘탐험’ 요소에서 굉장히 중요한 기반입니다!

5. 다음 강의 예고

3강 – 타일맵과 Tiled 툴 사용법, 레벨 불러오기
다음 시간엔 직접 만든 맵 에디터인 Tiled를 활용해서, 타일맵 구조로 실제 레벨을 제작하고 Pygame에서 불러오는 방법을 실습해볼 거예요. 실전 게임 개발자가 된 느낌으로 만들어볼 준비 되셨죠?

이 시리즈는 캐릭터와 맵 중심의 RPG를 기초부터 완성까지 따라 만들 수 있도록 구성된 실습형 강의입니다. 계속해서 완성도를 높여가봐요!