목차

이전 항목

스크린 액션, 값, 함수

다음 항목

스크린 언어 최적화

링크


원문 보러 가기
오역 신고하기
Created using Sphinx.

특수 스크린 목록

렌파이에 있는 특수 스크린 이름에는 두 가지 종류가 있습니다. 하나는 렌파이 명령문(또는 프로그램 상에서 동등한 명령문)이 구동될 때 자동으로 나타나는 스크린입니다. 다른 하나는 메뉴 스크린 입니다. 특수 스크린에는 그 스크린이 수행하는 일반적인 기능에 어울리는 일반적인 이름이 정해져있으며, 필요하다면 빠뜨리거나 작동방식을 바꿀 수 있습니다.

이 페이지에는 각 특수 스크린의 예제 스크립트가 적혀있습니다. 예제에는 가장 기본이 되는 기능만을 수행하는 스크립트가 적혀있을 뿐이지만 스크린 시스템을 이용하면 화면에 다양한 기능을 추가할 수 있다는 사실을 기억하세요. 예를 들어 기본 say 스크린에는 오직 글자만 표시되지만, 스크린 시스템을 이용하면 스킵 버튼, 자동진행 버튼, 음소거 버튼 등을 쉽게 추가할 수 있습니다.

특수 스크린 중에는 매개변수를 받는 스크린도 있습니다. 이들 매개변수는 해당 스크린의 범위 내에서 변수로써 접근할 수 있습니다.

또한 특수 스크린 중에는 특별 id를 사용하는 스크린도 있습니다. 특별 id는 특정한 타입의 디스플레이어블에만 배정해야 합니다. 특별 id가 지정된 디스플레이어블에는 스타일 속성을 적용할 수 있으며 호출 코드를 이용해 접근할 수도 있습니다.

게임 내에서 사용되는 화면

특정한 렌파이 명령문이 실행될 때 자동으로 나타나는 스크린입니다.

Say

say 스크린은 ADV 모드의 대사를 나타낼 때 say문에 의해 호출되는 스크린입니다. say스크린은 아래의 매개 변수와 함께 표시됩니다.:

who
대사를 말하는 캐릭터의 이름.
what
캐릭터가 말하고 있는 대사.

say 스크린에는 다음과 같은 id가 지정된 디스플레이어블을 선언해야 합니다.:

"who"
대사를 말하는 캐릭터의 이름을 표시하는 텍스트 디스플레이어블. Character 객체에 이 디스플레이어블을 꾸밀 때 필요한 인수들을 지정할 수 있다.
"what"
캐릭터의 대사를 표시하는 텍스트 디스플레이어블. Character 객체에 이 디스플레이어블을 꾸밀 때 필요한 인수들을 지정할 수 있다. what id를 사용하는 디스플레이어블은 반드시 정의되어야 한다. ctc, 자동 진행 모드 등에 걸리는 시간을 계산할 때 이 디스플레이어블을 이용하기 때문이다.
"window"
window 혹은 frame. 보통은 who와 what 텍스트가 이 디스플레이어블 안에 나타난다. Character 객체에 이 디스플레이어블을 꾸밀 때 필요한 인수들을 지정할 수 있다.
screen say(who, what):

    window id "window":
        has vbox

        if who:
            text who id "who"

        text what id "what"

choice

choice 스크린은 게임 진행 중 menu 문으로 만든 선택지를 표시할 때 사용됩니다. 아래의 매개 변수를 받습니다.:

items
(caption, action, chosen) 튜플의 리스트. 각 선택지문에서 caption 은 선택문으로 쓰일 텍스트, action 은 선택문을 눌렀을 때 실행할 액션 또는 선택지문이 아닌 단순한 문장이라면 None 이다. chosen 에는 해당 선택지문을 이전에 선택한 적이 있는지에 대한 여부가 저장되어 있다. (진행중인 게임에는 존재할 필요가 없다).
screen choice(items):

    window:
        style "menu_window"

        vbox:
            style "menu"

            for caption, action, chosen in items:

                if action:

                    button:
                        action action
                        style "menu_choice_button"

                        text caption style "menu_choice"

                else:
                    text caption style "menu_caption"

Input

input 스크린은 renpy.input() 을 나타낼 때 사용되는 스크린입니다. 하나의 매개변수를 받습니다:

prompt
renpy.input에 지정된 확인 질문 텍스트.

input 스크린에는 아래의 id를 가지는 디스플레이어블을 선언해야 합니다:

"input"
반드시 있어야 하는 input 디스플레이어블. input 디스플레이어블은 renpy.input에 지정한 모든 매개변수를 전달받도록 제작된 디스플레이어블이므로 반드시 있어야한다.
screen input(prompt):

    window:
        has vbox

        text prompt
        input id "input"

NVL

nvl 스크린은 NVL 모드의 대사를 나타낼 때 사용됩니다. 다음과 같은 매개 변수를 받습니다.:

dialogue
( who, what, who_id, what_id, window_id) 튜플의 리스트. 각 튜플은 화면에 표시되는 문장을 뜻한다. who 와 what 은 각각 캐릭터 이름과 대사에 해당하는 문자열이다. who_id, what_id, window_id 는 각각 who, what , window 디스플레이어블에 배정해야 한다.
items

(caption, action, chosen) 튜플 리스트. caption 은 선택지문으로 쓰일 텍스트, action은 선택문을 눌렀을 때 실행할 액션 또는 선택지문이 아닌 단순한 문장이라면 None 이다. chosen 에는 해당 선택문을 유저가 이전에 선택한 적이 있는지의 여부가 저장되어 있다 (진행중인 게임에는 존재할 필요가 없다).

items가 비어있으면 선택지는 표시되지 않는다.

NVL 모드에서 표시되는 선택문을 나타낼 때 nvl_choice 스크린을 이용할 수도 있습니다. 이 스크린은 nvl 스크린과 같은 매개변수를 받습니다. nvl_choice 스크린이 있으면 nvl 스크린 대신 nvl_screen 을 사용해 게임 내에서 선택지를 표시합니다.

screen nvl(dialogue, items=None):

    window:
        style "nvl_window"

        has vbox:
            style "nvl_vbox"

        # 대사를 표시한다.
        for who, what, who_id, what_id, window_id in dialogue:
            window:
                id window_id

                has hbox:
                    spacing 10

                if who is not None:
                    text who id who_id

                text what id what_id

        # 선택지가 있다면 선택지를 표시한다.
        if items:

            vbox:
                id "menu"

                for caption, action, chosen in items:

                    if action:

                        button:
                            style "nvl_menu_choice_button"
                            action action

                            text caption style "nvl_menu_choice"

                    else:

                        text caption style "nvl_dialogue"

Notify

notify 스크린은 게임에서 안내문을 나타낼 때 renpy.notify() 가 사용하는 스크린입니다. 보통은 트랜스폼과 함께 사용됩니다. 다음의 매개변수를 받습니다.:

message
표시할 안내문.

기본 notify 스크린과 그와 관련된 트랜스폼은 다음과 같습니다:

screen notify(message):
    zorder 100

    text message at _notify_transform

    # 화면이 처음으로 나타나서 사라질 때까지
    # 걸리는 시간을 정한다.
    timer 3.25 action Hide('notify')

transform _notify_transform:
    # 위치를 정한다.
    xalign .02 yalign .015

    # 스크린을 표시하고 숨길 때의 행동을 정한다.
    on show:
        alpha 0
        linear .25 alpha 1.0
    on hide:
        linear .5 alpha 0.0

메뉴 화면

아래 적힌 스크린은 메뉴 스크린입니다. 메뉴 스크린 중에서 특히 main_menuyesno_prompt 는 반드시 호출됩니다. 유저가 우클릭 등으로 게임 메뉴를 띄울 때에는 _game_menu_screen 변수에 지정한 스크린이 나타날 것입니다. (기본값은 save 입니다.)

메뉴 스크린은 어느 정도 자유롭게 추가하거나 수정할 수 있습니다.

Save

save 스크린은 게임을 세이브할 파일을 선택하는 스크린입니다.

screen save():

    # 다른 메뉴 스크린으로 대체되도록 하는 태그.
    tag menu

    use navigation

    frame:
        has vbox

        # 유저가 편하게 페이지를 선택할 수 있도록
        # 상단에 배치된 버튼.
        hbox:
            textbutton _("Previous") action FilePagePrevious()
            textbutton _("Auto") action FilePage("auto")

            for i in range(1, 9):
                textbutton str(i) action FilePage(i)

            textbutton _("Next") action FilePageNext()

        # 파일 슬롯을 표 형태로 표시.
        grid 2 5:
            transpose True
            xfill True

            # 10개의 파일 슬롯 표시. 1 - 10까지 숫자가 매겨진다.
            for i in range(1, 11):

                # 각 파일 슬롯은 버튼이다.
                button:
                    action FileAction(i)
                    xfill True
                    style "large_button"

                    has hbox

                    # 버튼에 설명과 스크린샷을
                    # 추가한다.
                    add FileScreenshot(i)
                    text ( " %2d. " % i
                           + FileTime(i, empty=_("Empty Slot."))
                           + "\n"
                           + FileSaveName(i)) style "large_button_text"

Load

load 스크린은 불러올 세이브 파일을 선택하는 스크린입니다.

screen load():

    # 다른 메뉴화면으로 대체되도록 한다.
    tag menu

    use navigation

    frame:
        has vbox

        # 유저가 편하게 페이지를 선택할 수 있도록
        # 상단에 배치된 버튼.
        hbox:
            textbutton _("Previous") action FilePagePrevious()
            textbutton _("Auto") action FilePage("auto")

            for i in range(1, 9):
                textbutton str(i) action FilePage(i)

            textbutton _("Next") action FilePageNext()

        # 파일 슬롯을 표 형태로 표시.
        grid 2 5:
            transpose True
            xfill True

            # 파일 슬롯 10개 표시. 1 - 10까지 숫자가 매겨진다.
            for i in range(1, 11):

                # 각 파일 슬롯은 버튼이다.
                button:
                    action FileAction(i)
                    xfill True
                    style "large_button"

                    has hbox

                    # 버튼에 설명과 스크린샷을
                    # 추가한다.
                    add FileScreenshot(i)
                    text ( " %2d. " % i
                           + FileTime(i, empty=_("Empty Slot."))
                           + "\n"
                           + FileSaveName(i)) style "large_button_text"

Preferences

preferences 스크린은 게임 표시 방식 등에 관한 옵션이 있는 환경 설정 스크린입니다.

screen preferences():

    tag menu

    # 내비게이션 스크린을 사용한다.
    use navigation

    # 내비게이션의 행을 3 행까지 그리드에 추가한다.
    grid 3 1:
        style_group "prefs"
        xfill True

        # 왼쪽 행.
        vbox:
            frame:
                style_group "pref"
                has vbox

                label _("Display")
                textbutton _("Window") action Preference("display", "window")
                textbutton _("Fullscreen") action Preference("display", "fullscreen")

            frame:
                style_group "pref"
                has vbox

                label _("Transitions")
                textbutton _("All") action Preference("transitions", "all")
                textbutton _("None") action Preference("transitions", "none")

            frame:
                style_group "pref"
                has vbox

                label _("Text Speed")
                bar value Preference("text speed")

            frame:
                style_group "pref"
                has vbox

                textbutton _("Joystick...") action ShowMenu("joystick_preferences")

        vbox:

            frame:
                style_group "pref"
                has vbox

                label _("Skip")
                textbutton _("Seen Messages") action Preference("skip", "seen")
                textbutton _("All Messages") action Preference("skip", "all")

            frame:
                style_group "pref"
                has vbox

                textbutton _("Begin Skipping") action Skip()

            frame:
                style_group "pref"
                has vbox

                label _("After Choices")
                textbutton _("Stop Skipping") action Preference("after choices", "stop")
                textbutton _("Keep Skipping") action Preference("after choices", "skip")

            frame:
                style_group "pref"
                has vbox

                label _("Auto-Forward Time")
                bar value Preference("auto-forward time")

        vbox:

            frame:
                style_group "pref"
                has vbox

                label _("Music Volume")
                bar value Preference("music volume")

            frame:
                style_group "pref"
                has vbox

                label _("Sound Volume")
                bar value Preference("sound volume")
                textbutton "Test" action Play("sound", "sound_test.ogg") style "soundtest_button"

            frame:
                style_group "pref"
                has vbox

                label _("Voice Volume")
                bar value Preference("voice volume")
                textbutton "Test" action Play("voice", "voice_test.ogg") style "soundtest_button"

init python:

    style.pref_frame.xfill = True
    style.pref_frame.xmargin = 5
    style.pref_frame.top_margin = 5

    style.pref_vbox.xfill = True

    style.pref_button.size_group = "pref"
    style.pref_button.xalign = 1.0

    style.pref_slider.xmaximum = 192
    style.pref_slider.xalign = 1.0

    style.soundtest_button.xalign = 1.0

Yesno_Prompt

yesno_prompt 스크린은 유저에게 예/아니오를 묻는 스크린입니다. 아래의 매개변수를 받습니다.:

message

플레이어에게 보여줄 메세지. 다음 중 하나가 된다:

  • layout.ARE_YOU_SURE - "확실합니까?" 기본 메세지. 어떤 메세지를 사용해야할 지 알 수 없는 경우에 사용한다.
  • layout.DELETE_SAVE - "이 세이브를 삭제합니까?"
  • layout.OVERWRITE_SAVE - "세이브 파일을 덮어씁니까?"
  • layout.LOADING - "세이브를 불러오면 세이브하지 않은 데이터를 잃게 됩니다. 데이터를 불러옵니까?"
  • layout.QUIT - "종료하시겠습니까?"
  • layout.MAIN_MENU - "메인 메뉴로 돌아갑니까? 세이브하지 않은 데이터를 잃게 됩니다."

해당 변수의 값은 모두 문자열로, 텍스트 디스플레이어블을 사용해 나타낼 수 있다.

yes_action
유저가 "네"를 눌렀을 경우 실행할 액션.
no_action
유저가 "아니오"를 눌렀을 경우 실행할 액션.
screen yesno_prompt(message, yes_action, no_action):

    modal True

    window:
        style "gm_root"

    frame:
        style_group "yesno_prompt"

        xfill True
        xmargin 50
        ypadding 25
        yalign .25

        vbox:
            xfill True
            spacing 25

            text _(message):
                text_align 0.5
                xalign 0.5

            hbox:
                spacing 100
                xalign .5
                textbutton _("Yes") action yes_action
                textbutton _("No") action no_action