Arcade는 2D 아케이드 게임을 제작하는 데 사용할 수 있는 인기 파이썬 라이브러리입니다. 파이썬으로 게임을 만들기 위한 간단한 프레임워크를 제공하는 사용하기 쉬운 라이브러리입니다.

모든 게임의 필수 구성 요소 중 하나는 플레이어의 움직임입니다.

아케이드에서 간단한 게임 만들기

전체 코드는 이 GitHub 리포지토리 에서 찾을 수 있습니다.

시작하기 전에 장치에 pip가 설치되어 있는지 확인하세요. 다음 명령을 사용하여 아케이드 라이브러리를 설치합니다:

 pip install library 

그런 다음, arcade.Sprite 클래스의 서브클래스로 Player 클래스를 생성하고 arcade.Window의 서브클래스로 MyGame 클래스를 생성합니다. MyGame 클래스에는 게임 오브젝트를 설정하고, 화면에 렌더링하고, 게임 상태를 업데이트하고, 사용자 입력을 처리하는 메서드가 있습니다. 게임 화면과 플레이어 객체를 생성하는 코드는 다음과 같습니다:

 import arcade

SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600

class Player(arcade.Sprite):
    def __init__(self):
        super().__init__("player.png", 0.5)
        self.center_x = SCREEN_WIDTH // 2
        self.center_y = SCREEN_HEIGHT // 2

class MyGame(arcade.Window):
    def __init__(self):
        super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, "My Game")
        self.player = None
        arcade.set_background_color(arcade.color.BLACK)

    def setup(self):
        self.player = Player()

    def on_draw(self):
        arcade.start_render()
        self.player.draw()

    def update(self, delta_time):
        pass

MyGame().run()

키보드 입력으로 플레이어 움직임 추가

이제 게임 화면과 플레이어 객체를 만들었으므로 키보드 입력에 반응하여 플레이어를 움직일 수 있습니다. 플레이어가 키를 누르거나 놓을 때 호출할 on_key_press() 및 on_key_release() 메서드를 정의합니다.

 def on_key_press(self, key, modifiers):
    if key == arcade.key.LEFT:
        self.player.change_x = -5
    elif key == arcade.key.RIGHT:
        self.player.change_x = 5
    elif key == arcade.key.UP:
        self.player.change_y = 5
    elif key == arcade.key.DOWN:
        self.player.change_y = -5

def on_key_release(self, key, modifiers):
    if key == arcade.key.LEFT or key == arcade.key.RIGHT:
        self.player.change_x = 0
    elif key == arcade.key.UP or key == arcade.key.DOWN:
        self.player.change_y = 0

키보드 입력으로 플레이어 움직임을 추가할 때 self.player.change_x 및 self.player.change_y에 할당된 값을 변경하여 이동 속도를 커스터마이징할 수 있습니다. 게임 화면 내에서 플레이어의 움직임을 제한하는 조건을 추가할 수도 있습니다.

마우스 입력으로 플레이어 움직임 추가

키보드 입력 외에도 마우스 입력을 사용하여 플레이어 움직임을 추가할 수 있습니다. 플레이어가 마우스를 움직일 때 실행할 on_mouse_motion() 메서드를 정의합니다. 메서드 내에서 플레이어 오브젝트의 center_x 및 center_y 속성을 현재 마우스 위치로 설정합니다.

 def on_mouse_motion(self, x, y, dx, dy):
    self.player.center_x = x
    self.player.center_y = y

마우스 입력으로 플레이어 움직임을 추가할 때 on_mouse_press() 또는 on_mouse_drag() 등의 메서드를 정의하여 사용자가 마우스를 클릭하거나 누르고 있을 때 플레이어 오브젝트의 동작을 커스터마이즈할 수 있습니다. 이러한 메서드를 사용하여 게임 메커니즘에 따라 사격이나 점프와 같은 플레이어 동작을 트리거할 수 있습니다.

이 글도 확인해 보세요:  JES를 활용한 흥미로운 사운드 처리 기법 3가지

추가 기능 소개

가속 및 감속을 고려하여 플레이어의 움직임을 더욱 향상시킬 수 있습니다. on_key_press() 메서드를 수정하여 이동 방향에 따라 플레이어 오브젝트의 change_x 및 change_y 속성을 빼거나 더할 수 있습니다. 또한 이전과 같이 on_key_release() 메서드에서 change_x 및 change_y 속성을 0으로 설정합니다.

 def on_key_press(self, key, modifiers):
    if key == arcade.key.LEFT:
        self.player.change_x -= 5
    elif key == arcade.key.RIGHT:
        self.player.change_x += 5
    elif key == arcade.key.UP:
        self.player.change_y += 5
    elif key == arcade.key.DOWN:
        self.player.change_y -= 5

def on_key_release(self, key, modifiers):
    if key == arcade.key.LEFT or key == arcade.key.RIGHT:
        self.player.change_x = 0
    elif key == arcade.key.UP or key == arcade.key.DOWN:
        self.player.change_y = 0

파이게임과 마찬가지로 플레이어 오브젝트와 아케이드의 적이나 장애물 등 다른 게임 오브젝트 간의 충돌 감지를 추가할 수도 있습니다. MyGame 클래스의 update() 메서드에 다음 코드를 추가하면 이 작업을 수행할 수 있습니다:

 def update(self, delta_time):
    self.player.update()

    # Check for collisions between player and other game objects
    collisions = arcade.check_for_collision_with_list(self.player, self.enemy_list)

    for collision in collisions:
        collision.kill()

인터랙티브 플레이어 움직임으로 매력적인 게임 만들기

인터랙티브 플레이어 움직임은 모든 매력적인 게임의 중요한 요소입니다. 점프, 달리기, 비행, 슬라이딩과 같은 다양한 유형의 움직임 메커니즘을 사용하면 게임에 다양성과 흥미를 더할 수 있습니다.

플레이어에게 움직임을 제어할 수 있는 권한을 부여하면 주체성과 몰입감이 더해져 더욱 만족스러운 게임 경험을 제공할 수 있습니다.

By 최은지

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