스크롤 배경의 활용은 게임의 미적 매력과 심오함에 크게 기여할 수 있습니다. 스크롤 배경은 광학적으로 움직이는 듯한 인상을 주어 생동감 있고 매혹적인 분위기를 연출합니다. 스크롤 배경의 통합은 Pygame 구현을 통해 최소한의 노력으로 실행할 수 있습니다.

유명한 파이썬 프레임워크인 파이게임을 활용하면 매끄러운 스크롤 배경을 갖춘 인터랙티브 게임 환경을 제작할 수 있어 플레이어의 전반적인 몰입감을 높일 수 있습니다.

간단한 게임 만들기

파이게임 프레임워크 내에서 스크롤 배경을 구현하는 아이디어를 파악하려면 플레이어가 여러 레벨을 수평으로 이동할 수 있는 기본 게임을 개발하는 것부터 시작하세요. 여기에는 게임 환경의 기초가 될 직사각형 모양으로 묘사된 두 개의 플랫폼 오브젝트를 통합하는 것이 포함될 수 있습니다. 이를 위해 simple-game.py라는 제목의 파일을 새로 생성하세요.

게임 루프 내에서 플레이어의 게임 종료 결정 등 게임 플레이 중에 발생할 수 있는 다양한 이벤트 처리를 고려하는 것이 중요합니다. 또한 터치스크린이나 키보드와 같은 입력 소스를 능숙하게 관리하면 게임 내에서 플레이어의 움직임을 효과적으로 제어할 수 있습니다.

간단한 게임의 결과는 다음과 같습니다:

다른 레이어 만들기

뚜렷한 색조를 가진 수많은 배경을 구현하여 각 레이어가 다양한 속도로 움직이면서 시차 효과를 낼 수 있습니다. 이 기법은 깊이감의 착시 효과를 제공하고 게임 내에서 움직임의 감각을 강화합니다.

파이게임의 렉트 오브젝트를 활용하여 게임 창 전체에 걸쳐 두 개의 배경 레이어를 생성해야 합니다. 또한 이 레이어의 색상은 배경\_색상 목록에서 지정하고 이동 속도는 배경\_속도 목록에서 지정해야 합니다.

 # Add this code below the previous section

background_layers = [
    pygame.Rect(0, 0, screen_width, screen_height),
    pygame.Rect(0, 0, screen_width, screen_height)
]

background_colors = [(30, 30, 30), (60, 60, 60)]
background_speeds = [0.1, 1.0]

스크롤 배경 효과 추가

스크롤 배경 효과를 얻으려면 게임 루프 내에서 배경 레이어의 위치를 수정해야 합니다. 이는 지정된 속도에 따라 각 레이어의 수평 위치를 업데이트하여 수행할 수 있습니다.

이 글도 확인해 보세요:  파이썬을 사용하여 FLAMES 게임 플레이하기

다음은 사용자의 요청에 따라 가로로 스크롤되는 배경 이미지를 생성하기 위한 코드의 업데이트 버전입니다. 궁금한 점이 있거나 추가 지원이 필요한 경우 알려주세요.

 for i in range(len(background_layers)):
    background_layers[i].x -= background_speeds[i]

    if background_layers[i].x <= -screen_width:
        background_layers[i].x = 0

    pygame.draw.rect(screen, background_colors[i], background_layers[i])

모든 전경면을 순회합니다.평면의 수평 좌표에서 수반되는 속도를 빼면 평면이 왼쪽으로 변위됩니다. 평면이 디스플레이의 수평 끝에 도달하면 오른쪽으로 위치를 변경하여 중단 없는 스크롤 현상을 생성합니다.

마지막으로 pygame.draw.rect()를 사용하고 적절한 색상과 직사각형의 경계를 정의하기 위한 pygame.Rect 객체를 전달하여 각 직사각형 배경을 디스플레이에 렌더링합니다.

이동 중 시차 효과 추가

플레이어의 움직임에 따른 플랫폼의 변위를 조작하여 시차 효과를 강화하면 깊이감이 강화되고 움직임이 더욱 생생하게 느껴질 수 있습니다. 이를 구현하려면 “parallax.py”라는 이름의 파일을 새로 생성하고 다음과 같이 필요한 수정을 추가합니다:

 # Define the platform positions and speeds
rect1 = pygame.Rect(50, screen_height - 100, 200, 10)
rect2 = pygame.Rect(screen_width - 250, screen_height - 200, 200, 10)

platforms = [
    {"rect": rect1, "speed": 3},
    {"rect": rect2, "speed": 1}
]

# Add this code inside the game loop

# Player movement
keys = pygame.key.get_pressed()

if keys[pygame.K_LEFT] and player_x > 0:
    player_x -= player_speed

    for platform in platforms:
        platform["rect"].x -= platform["speed"]

if keys[pygame.K_RIGHT] and player_x < screen_width:
    player_x += player_speed

    for platform in platforms:
        platform["rect"].x += platform["speed"]

for platform in platforms:
    pygame.draw.rect(screen, (0, 255, 0), platform["rect"])

플랫폼은 직사각형 엔티티(rect)와 그 움직임에 대한 지정된 속도(속도)를 모두 포함하는 사전으로 표현됩니다. 이러한 구성 요소는 플레이어의 동작에 따라 게임 루프 내에서 업데이트됩니다.

이 조정의 구현을 통해 스크롤 효과는 플레이어가 활발하게 움직일 때만 작동하여 심오함과 움직임의 인상을 강화합니다.

추가 기능 포함

게임 스크롤 배경의 미적 품질을 개선하기 위해 다양한 보조 속성을 통합할 수 있습니다. 참고용으로 몇 가지 가능한 개선 사항을 아래에 설명했습니다.

이 글도 확인해 보세요:  슬랙에서 나만의 사용자 지정 슬래시 명령 만들기

배경 색상 무작위화

배경 레이어에 다양성을 도입하기 위해 이러한 레이어의 색상을 무작위로 조정하는 것을 고려할 수 있습니다. 이는 ‘배경\_색상’ 목록의 내용을 변경하여 수행할 수 있습니다.

 import random

# Add this code before the game loop

background_colors = [
    (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)),
    (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)),
    (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
]

배경 레이어 추가

추가 배경 레이어를 추가하면 pygame.Rect 개체, 색상 팔레트 및 이동 변수를 사용하여 여러 수준의 깊이를 만들어 더 복잡한 패럴랙스 효과를 얻을 수 있습니다.

 # Add this code before the game loop

background_layers = [
    pygame.Rect(0, 0, screen_width, screen_height),
    pygame.Rect(0, 0, screen_width, screen_height),
    pygame.Rect(0, 0, screen_width, screen_height),
    pygame.Rect(0, 0, screen_width, screen_height)
]

background_colors = [
    (30, 30, 30),
    (60, 60, 60),
    (90, 90, 90),
    (120, 120, 120)
]

background_speeds = [1, 2, 3, 4]

배경에 이미지 사용

또는 일반 색상을 배경으로 사용하는 대신 이미지 파일을 게임의 시각적 표현을 위한 기초로 사용할 수 있습니다. Pygame 라이브러리에는 이러한 그래픽 요소를 로드하고 렌더링할 수 있는 기능이 포함되어 있습니다.

파이게임 라이브러리의 `pygame.image.load()` 함수를 사용하여 이미지 파일 `background_0.png`, `background_1.png`, `background_2.png`를 로드합니다. 그런 다음 `pygame.transform.scale()` 메서드를 사용하여 화면 크기에 맞게 이미지의 크기를 조정하고 크기를 조정합니다.

 # Add this code before the game loop

background_images = [
    pygame.image.load("background_0.png").convert(),
    pygame.image.load("background_1.png").convert(),
    pygame.image.load("background_2.png").convert()
]

background_speeds = [1, 2, 3]

for i in range(len(background_images)):
    size = (screen_width, screen_height)
    background_images[i] = pygame.transform.scale(background_images[i], size)

앞서 언급한 이미지를 대신 활용하여 배경 레이어 렌더링을 담당하는 루프를 수정합니다.

 # Update this code inside the game loop

for i in range(len(background_layers)):
    background_layers[i].x -= background_speeds[i]

    if background_layers[i].x <= -screen_width:
        background_layers[i].x = 0

    screen.blit(background_images[i], background_layers[i])

스크롤 배경 모범 사례

파이게임 프로젝트에 스크롤 배경을 통합할 때는 최적의 결과를 위해 특정 지침을 따르는 것이 좋습니다.

성능 최적화

코드를 최적화하고 계산을 최소화하여 스크롤 배경의 지속적인 렌더링과 업데이트를 통해 원활한 게임플레이를 보장합니다.

이 글도 확인해 보세요:  JES에서 사운드를 임포트하고 재생하는 방법

레이어 속도 실험

밑에 깔린 레이어의 속도를 조작하면 다양한 결과를 얻을 수 있습니다. 다양한 레벨로 실험하여 최적의 균형을 찾고 원하는 미적 효과를 얻을 수 있습니다.

다양한 화면 크기에서 테스트

동적 크기 조정을 구현하거나 다양한 화면 비율에 대해 별개의 배경 이미지를 활용하여 스크롤 배경이 다양한 화면 크기와 호환되는지 확인합니다.

적절한 이미지 형식 사용

배경에 사용할 이미지를 선택할 때는 파일 크기와 시각적 충실도 간의 균형을 맞추기 위해 가장 적합한 이미지 형식(예: PNG 또는 JPEG)을 고려하는 것이 중요합니다. 또한 이미지의 크기를 조작하고 압축 및 최적화와 같은 기술을 구현하면 로드 시간을 간소화하는 데 도움이 될 수 있습니다.

메모리 사용량 고려

여러 개의 고화질 이미지를 배경으로 사용하면 게임의 메모리 사용량에 영향을 미칠 수 있습니다. 큰 이미지 크기로 인해 성능이나 응답성이 저하되지 않도록 주의해야 합니다.

스크롤링 배경으로 게임의 재미를 더하세요

스크롤링 배경을 활용하면 움직이는 파노라마, 고급 도시 스카이라인, 물속에 잠긴 해저 세계 등 다양한 배경을 연출할 수 있습니다. 전경과 배경에 있는 오브젝트의 움직임에 따라 깊이감을 부여하는 패럴랙스 효과를 사용하여 게임 환경에 생동감 넘치는 인터랙티브한 품질을 제공합니다.

플레이어가 게임을 더 재미있게 즐기고 몰입할 수 있도록 스크롤 가능한 배경의 잠재력을 테스트하고, 개선하고, 조사하는 데 노력해야 합니다.

By 최은지

윈도우(Windows)와 웹 서비스에 대한 전문 지식을 갖춘 노련한 UX 디자이너인 최은지님은 효율적이고 매력적인 디지털 경험을 개발하는 데 탁월한 능력을 발휘합니다. 사용자의 입장에서 생각하며 누구나 쉽게 접근하고 즐길 수 있는 콘텐츠를 개발하는 데 주력하고 있습니다. 사용자 경험을 향상시키기 위해 연구를 거듭하는 은지님은 All Things N 팀의 핵심 구성원으로 활약하고 있습니다.