마우스 커서 사용자 설정

Ren'Py에는 사용자 정의 마우스 커서를 만드는 두 가지 방식이 있습니다. 하드웨어 마우스 커서를 사용하거나, Ren'Py가 디스플레이어블을 커서로 직접 그리게 할 수 있습니다.

하드웨어 커서의 장점은 다음과 같습니다.

  • 반응이 매우 빠릅니다.

  • 처리 부담이 적어 Ren'Py가 다른 작업에 더 많은 시간을 쓸 수 있습니다.

다음과 같은 제약도 있습니다.

  • 작은 크기만 지원합니다. 32x32는 보장되며 64x64도 대체로 작동합니다.

  • 이미지 파일의 연속으로만 구성할 수 있습니다.

디스플레이어블 커서는 Ren'Py가 그릴 수 있는 것이라면 무엇이든 사용할 수 있지만, 그리기 작업을 Ren'Py가 직접 처리해야 합니다. 컴퓨터에서 삼중 버퍼링을 사용하면 하드웨어 커서에는 없는 지연이 생길 수 있습니다.

하드웨어 마우스 커서

하드웨어 커서는 config.mouse 변수로 설정합니다. 커서 이름을 프레임 목록에 연결하는 딕셔너리입니다. 각 프레임은 이미지 파일과 이미지 안의 X·Y 오프셋으로 구성된 3요소 튜플입니다.

예를 들면 다음과 같습니다.

define config.mouse = { }
define config.mouse['default'] = [ ( "gui/arrow.png", 0, 0) ]
define config.mouse['spin' ] = [
    ( "gui/spin0.png", 7, 7 ),
    ( "gui/spin1.png", 7, 7 ),
    ( "gui/spin2.png", 7, 7 ),
    ( "gui/spin3.png", 7, 7 ),
    ( "gui/spin4.png", 7, 7 ),
    ( "gui/spin5.png", 7, 7 ),
    ( "gui/spin6.png", 7, 7 ),
    ( "gui/spin7.png", 7, 7 ),
]

여러 프레임으로 된 애니메이션은 초당 20프레임으로 재생됩니다. Ren'Py는 이미지나 오프셋이 바뀔 때만 커서를 갱신합니다.

커서 상태와 각 상태의 용도는 다음 표와 같습니다.

상태

용도

default

별도의 상태를 지정하지 않았을 때 사용합니다. 더 구체적인 키가 없을 때의 대체값이므로 반드시 정의해야 합니다.

say

플레이어에게 say 스크린을 표시할 때 사용합니다.

with

화면 전환 중에 사용합니다.

menu

선택지 같은 메뉴를 표시할 때 사용합니다.

prompt

플레이어에게 입력을 요청할 때 사용합니다.

imagemap

이미지맵에서 사용합니다.

button

버튼이나 이미지 버튼 위에 마우스를 올렸을 때 사용합니다.

pause

pause 문이나 renpy.pause()로 대기할 때 사용합니다.

mainmenu

메인 메뉴에서 사용합니다.

gamemenu

게임 메뉴에서 사용합니다.

각 키에 pressed_ 접두사를 붙이면 마우스 버튼을 누르는 동안 사용할 커서를 지정할 수 있습니다. 예를 들어 버튼을 클릭할 때는 pressed_button을 사용합니다. 다른 누름 상태의 커서가 없을 때 쓸 기본 커서는 pressed_default로 지정합니다.

예를 들면 다음과 같습니다.

define config.mouse = { }
define config.mouse['default'] = [ ( "gui/arrow.png", 0, 0) ]
define config.mouse['pressed_default'] = [ ( "gui/arrow_pressed.png", 0, 0) ]
define config.mouse['button'] = [ ( "gui/arrow_button.png", 0, 0) ]
define config.mouse['pressed_button'] = [ ( "gui/arrow_button_pressed.png", 0, 0) ]
define config.mouse['menu'] = [ ( "gui/arrow_menu.png", 0, 0) ] # This cursor will be used when the player is in a menu
# Since there is no "pressed_menu" cursor, "pressed_default" cursor will be used instead

디스플레이어블 마우스 커서

디스플레이어블 커서는 config.mouse_displayable 변수와 MouseDisplayable을 사용합니다. 예를 들면 다음과 같습니다.

image mouse spin:
    "gui/spin0.png"
    rotate 0.0
    linear 1.0 rotate 360.0

    # Pause so image prediction can happen.
    pause 1.0

    repeat

define config.mouse_displayable = MouseDisplayable(
    "gui/arrow.png", 0, 0).add("spin", "mouse spin", 9.9, 9.9)
class MouseDisplayable(cursor, x=0, y=0)

커서용 디스플레이어블을 감싸서 플레이어의 마우스 움직임에 따라 화면에서 이동하게 하는 디스플레이어블입니다.

cursor

마우스 커서로 그릴 디스플레이어블입니다. None이면 하드웨어 커서를 사용합니다.

x, y

커서 이미지의 왼쪽 위를 기준으로 한 핫스폿의 가상 픽셀 좌표입니다.

add(name, cursor, x=0, y=0)

name 상태에서 표시할 두 번째 커서를 추가합니다. MouseDisplayable 자체를 반환하므로 메서드 호출을 이어 쓸 수 있습니다.

마우스 커서 사용하기

일반적으로 스크린의 버튼이나 바처럼 포커스를 받을 수 있는 요소에 mouse 속성으로 커서 이름을 지정합니다. 예를 들면 다음과 같습니다.

screen test():
    textbutton "마우스 테스트" action NullAction() mouse "spin"

default_mouse로 전역 마우스 커서를 설정할 수도 있습니다.

$ default_mouse = "spin"