特殊界面名稱 link

在Ren’Py中總共有兩類特殊界面名稱。第一類是在Ren’Py腳本語言命令(或者等效的程序)運行時自動顯示的部分。另一類是菜單界面。這些界面沿襲管用名稱,實現慣用功能,但界面名可以省略或者修改為不需要實際寫出來。

在本頁內容中,我們會給出一些界面樣例。需要意識到的重點是,一些界面必須包含精簡的功能,界面系統允許在界面上添加額外的功能。例如,標準的say界面只能顯示文本,使用界面系統就很容易添加跳過(skipping)、自動前進(auto-forwar)模式及靜音(muting)。

一些特殊界面會使用參數。這些參數可以在界面的作用域(scope)中,以變數的形式訪問。

一些界面也還有關聯的專屬id。專屬id會被分配給指定類型的可視組件。其還可以導致特性(property)分配給對應的可視組件,並可以讓Ren’Py顯示界面的其他部分可以訪問這個可視組件。

遊戲內界面 link

當某個Ren’Py語句執行時,這些界面會自動顯示。

Say link

say 界面在ADV模式對話時,透過say語句被調用。其顯示時使用下列參數:

who

發言角色名的文本。

what

發言角色說的內容。

需要使用下列id聲明可視組件:

“who”

一個文本組件,顯示發言角色名。character對象可以使用入參提供組件樣式。

“what”

一個文本組件,顯示發言角色說的內容。character對象可以使用入參提供組件樣式。 帶有該id的可視組件必須被定義 ,因為Ren’Py會使用它繼續按自動前進模式的時間,點擊繼續等。

“window”

一個窗口或者框架。按照習慣其包含who和what文本。character對象可以使用入參提供組件樣式。

screen say(who, what):

    window id "window":
        has vbox

        if who:
            text who id "who"

        text what id "what"

Choice link

choice 界面使用menu語句顯示遊戲內選項。其會使用下列參數:

items

這是一個菜單入口對象列表,表示菜單中的各個選項。每個菜單入口對象包含以下的欄位(field):

caption link

菜單選項標題字串。

action link

當菜單選項被選擇時執行的行為。如果這是菜單行為(action)的話,可以為None,且 config.narrator_menu 的值為False。

chosen link

整個遊戲流程中該選項至少被選擇過一次,則為True。

args link

一個元組,包含所以傳入菜單選項的固定位置入參。

kwargs link

一個字典,包含所有傳入菜單選項的關鍵字參數。

以上內容和行為,都會在menu語句接受後失效。

另外,傳入menu語句的所有入參都在調用對應界面時才真正執行傳參。

screen choice(items):

    window:
        style "menu_window"

        vbox:
            style "menu"

            for i in items:

                if i.action:

                    button:
                        action i.action
                        style "menu_choice_button"

                        text i.caption style "menu_choice"

                else:
                    text i.caption style "menu_caption"

Input link

input 界面用於顯示 renpy.input()。其使用一項參數。

prompt

應用於renpy.input的提示文本。

通常使用下面的id定義一個可視組件:

“input”

一個必須存在的輸入組件。其所有參數都會應用於renpy.input,所以必須存在。

screen input(prompt):

    window:
        has vbox

        text prompt
        input id "input"

NVL link

nvl 界面用於顯示NVL模式的對話。其使用下列參數:

dialogue

NVL層(entry)對象列表。每一個對象對應一行顯示的對話。每一層(entry)都有如下的欄位(field):

current link

若是對話的當前行則返回True。對話當前行必須必須使用名為“what”的id來顯示文本。

who link

發言角色名字,如果沒有對應的角色則為None。

what link

發言內容文本。

who_id, what_id, window_id

分別對應相關的層(entry)上發言者、對話和窗口的id。

who_args, what_args, window_args

發言者、對話和窗口相關的特性(property)。這些欄位(field)會自動被應用,前提是上述的id被正確配置。但也可以分開配置使這些欄位(field)可用。

multiple link

如果使用 多角色對話,這就是個具有2個元素的元組。第一個元素是個從1開始的對話語句塊(block)編號,第二個參數是multiple語句的對話語句塊(block)總數。

items

這是所有會用在 選擇界面 中的item列表。如果列表是空的,則菜單就不會顯示。

如果 items 不存在,NVL界面通常會給出id為“what”的文本部件(widget)。Ren’Py使用這個文本不見計算自動前進模式時間、點擊繼續等。(如果使用默認what_id的話,就能啟用自動模式。)

Ren’Py 也支持 nvl_choice 界面,這個界面與 nvl 界面使用相同的參數,而且當向用戶展示遊戲內選項時會使用這些參數作為顯示環境設定。

screen nvl(dialogue, items=None):

    window:
        style "nvl_window"

        has vbox:
            style "nvl_vbox"

        # 顯示對話。
        for d in dialogue:
            window:
                id d.window_id

                has hbox:
                    spacing 10

                if d.who is not None:
                    text d.who id d.who_id

                text d.what id d.what_id

        # 如果存在菜單就顯示。
        if items:

            vbox:
                id "menu"

                for i in items:

                    if action:

                        button:
                            style "nvl_menu_choice_button"
                            action i.action

                            text i.caption style "nvl_menu_choice"

                    else:

                        text i.caption style "nvl_dialogue"

Notify link

notify 界面被 renpy.notify() 函數用於向用戶顯示通知消息。其主要用於連接某個transform,以處理整個通知任務。它僅使用一個參數:

message

顯示的資訊。

預設的notify界面和關聯的transform如下:

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

跳過提示 link

skip_indicator 界面在“跳過”過程中出現,完成“跳過”後隱藏。其不使用任何參數。

這是一個非常簡單的跳過提示界面:

screen skip_indicator():

    zorder 100

    text _("Skipping")

CTC(點擊繼續) link

ctc 界面會在對話顯示完畢,提示用戶點擊顯示更多文本的情況下出現。其可能會使用一個參數。

arg

如果 Character() 對象有一個 ctc 入參,就會被作為第一個固定位置入參傳入ctc界面。

這是一個非常簡單的ctc界面:

screen ctc(arg=None):

    zorder 100

    text _("Click to Continue"):
        size 12
        xalign 0.98
        yalign 0.98

        add arg

        text _("點擊繼續"):
            size 12

遊戲外菜單界面 link

這些是菜單界面。 main_menuyesno_prompt 會被隱式調用。當用戶調用遊戲菜單時,名為 _game_menu_screen 的界面就會顯示。(默認與 save 相同。)

記住,菜單界面可以任意組合和修改。

Save link

save 界面用於選擇一個文件保存遊戲進度。

screen save():

    # 這步確保任何其他菜單界面都會被替換。
    tag menu

    use navigation

    frame:
        has vbox

        # 最頂部的按鈕允許用戶選取文件的某個頁面(page)。
        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 link

load 界面用戶選取一個文件載入遊戲進度。

screen load():

    # 這步確保任何其他菜單界面都會被替換。
    tag menu

    use navigation

    frame:
        has vbox

        # 最頂部的按鈕允許用戶選取文件的某個頁面(page)。
        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 link

preference 界面用於提供遊戲顯示方面的環境設定選項。

環境設定主要是 Preference() 返回的行為或者條(bar)值。

screen preferences():

    tag menu

    # 包含導航。
    use navigation

    # 將每行導航放入三列寬度的網格中。
    grid 3 1:
        style_prefix "prefs"
        xfill True

        # 左列。
        vbox:
            frame:
                style_prefix "pref"
                has vbox

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

            frame:
                style_prefix "pref"
                has vbox

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

            frame:
                style_prefix "pref"
                has vbox

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

            frame:
                style_prefix "pref"
                has vbox

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

        vbox:

            frame:
                style_prefix "pref"
                has vbox

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

            frame:
                style_prefix "pref"
                has vbox

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

            frame:
                style_prefix "pref"
                has vbox

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

            frame:
                style_prefix "pref"
                has vbox

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

        vbox:

            frame:
                style_prefix "pref"
                has vbox

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

            frame:
                style_prefix "pref"
                has vbox

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

            frame:
                style_prefix "pref"
                has vbox

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

style pref_frame:
    xfill True
    xmargin 5
    top_margin 5

style pref_vbox:
    xfill True

style pref_button:
    size_group "pref"
    xalign 1.0

style pref_slider:
    xmaximum 192
    xalign 1.0

style soundtest_button:
    xalign 1.0

Confirm link

confirm 界面用於讓用戶做出“yes/no”類型的選擇。其使用下列參數:

message

顯示給用戶的資訊。Ren’Py中用到的提示資訊至少有以下幾種:

  • gui.ARE_YOU_SURE - “Are you sure?” 如果沒有匹配到合適的資訊,這項就是預設的提示資訊。

  • gui.DELETE_SAVE - “Are you sure you want to delete this save?”

  • gui.OVERWRITE_SAVE - “Are you sure you want to overwrite your save?”

  • gui.LOADING - “Loading will lose unsaved progress.nAre you sure you want to do this?”

  • gui.QUIT - “Are you sure you want to quit?”

  • gui.MAIN_MENU - “Are you sure you want to return to the mainnmenu? This will lose unsaved progress.”

  • gui.CONTINUE - “Are you sure you want to continue where you left off?”

  • gui.END_REPLAY - “Are you sure you want to end the replay?”

  • gui.SLOW_SKIP = “Are you sure you want to begin skipping?”

  • gui.FAST_SKIP_SEEN = “Are you sure you want to skip to the next choice?”

  • gui.FAST_SKIP_UNSEEN = “Are you sure you want to skip unseen dialogue to the next choice?”

  • UNKNOWN_TOKEN - This save was created on a different device. Maliciously constructed save files can harm your computer. Do you trust this save’s creator and everyone who could have changed the file?

  • TRUST_TOKEN - Do you trust the device the save was created on? You should only choose yes if you are the device’s sole user.

這些變數的值都是字串,表示都可以使用文本組件顯示。

yes_action

當用戶選擇“Yes”時執行的行為。

no_action

當用戶選擇“No”時執行的行為。

直到Ren’Py的6.99.10版本為止,該界面都稱之為 yesno_prompt 界面。如果沒有出現 confirm 界面,就是用 yesno_prompt 界面替代。

此界面也可以使用 renpy.confirm() 函數和 Confirm() 行為喚起。

screen confirm(message, yes_action, no_action):

    modal True

    window:
        style "gm_root"

    frame:
        style_prefix "confirm"

        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