其他函數和配置變數 link

此頁面記錄的是,其他地方沒有列出的各類函數和變數。

Ren’Py版本相關 link

renpy.version(tuple=False) link

tuple 為False,返回一個帶有“Ren’Py”的字串,字串後半部分是Ren’Py的當前版本資訊。

tuple 為True,返回一個元組。元組內每個元素分別表示版本資訊的一個整數部分。

renpy.version_string link

Ren’Py的版本號,類似於字串“Ren’Py 1.2.3.456”的格式。

renpy.version_only link

Ren’Py的版本號,不帶Ren’Py前綴,類似於字串“1.2.3.456”的格式。

renpy.version_tuple link

Ren’Py的版本號,類似於元組(1, 2, 3, 456)的格式。

renpy.version_name link

一個人類可能的版本名稱,類似“Example Version”的格式。

renpy.license link

一個表示許可證文本的字串,這個字串應該在遊戲的“關於”界面中顯示。

平台檢測 link

Ren’Py包含許多變數需要基於運行的平台進行設置。

renpy.windows link

在Windows平台運行時為True。

renpy.macintosh link

在macOS平台運行時為True。

renpy.linux link

在Linux或者POSIX類操作系統運行時為True。

renpy.android link

在安卓平台運行時為True。

renpy.ios link

在iOS平台運行時為True。

renpy.emscripten link

在瀏覽器內運行時為True。

renpy.mobile link

在安卓、iOS平台或瀏覽器運行時為True。

只有在實際設備運行而非模擬器上運行時,才會設置這些配置項。 這些配置項對平台敏感的Python是有用的。對顯示布局(layout)的問題,詳見 界面變種.

記憶體分析 link

renpy.diff_memory(update=True, skip_constants=False) link

分析Ren’Py和遊戲使用的對象(object)、貼圖(surface)和紋理(texture)記憶體。將上次調用該函數時和這次調用該函數的內容使用差異,並(在memory.txt和stdout)記錄下。

計算方式是,按照儲存區的名稱和Ren’Py實現中所有可達的記憶體。 如果某個對象通過多個名稱可達,就聲明為最短可達路徑。

skip_constants

若為True,除錯器將不會掃描巨大的Ren’Py容器,因為那些內存在啟動後就不會變化。

由於透過該函數可以掃描所有Ren’Py使用的記憶體,所以執行完畢相當耗時。

renpy.profile_memory(fraction=1.0, minimum=0, skip_constants=False) link

分析Ren’Py和遊戲使用的對象(object)、貼圖(surface)和紋理(texture)記憶體。將使用的記憶體總數寫入memory.txt和stdout。

計算方式是,按照儲存區的名稱和Ren’Py實現中所有可達的記憶體。 如果某個對象通過多個名稱可達,就聲明為最短可達路徑。

fraction

顯示使用記憶體總數的比例。1.0會顯示所有使用的記憶體,.9顯示最高的90%。

minimum

如果某個名稱的記憶體使用小於 minimum 字長,就不會顯示。

skip_constants

若為True,除錯器將不會掃描巨大的Ren’Py容器,因為那些內存在啟動後就不會變化。

由於透過該函數會掃描所有Ren’Py使用的記憶體,所以執行完畢相當耗時。

renpy.profile_rollback() link

分析回滾系統使用的記憶體。將回滾系統使用的記憶體寫入到memory.txt和stdout。該函數嘗試計算各種儲存變數用於回滾的記憶體量,以及回滾系統內部使用的記憶體量。

renpy.random link

這個對象是一個隨機數生成器,實現了 Python隨機數生成介面 。調用這個對象衍生的各種方法可以生成需要的隨機數。詳見Python中的完整列表。最常用的幾個如下:

  • renpy.random.random()

    返回一個位於(0.0, 1.0)開區間的隨機浮點數。

  • renpy.random.randint(a, b)

    返回一個整數N,a <= N <= b。

  • renpy.random.choice(seq)

    從非空序列 seq 隨機返回一個元素。

  • renpy.random.shuffle(seq)

    打亂序列 seq 中元素的順序。該函數不會返回列表,而是直接修改原列表。

與標準的Python隨機數生成器不同,這個對象可以與回滾相容,無論回滾多少次都生成相同的隨機數。所以可以使用這個對象代替標準Python隨機模組。

# 返回一個介於0到1之間的隨機浮點數。
$ randfloat = renpy.random.random()

# 返回一個介於1到20之間的隨機整數。
$ d20roll = renpy.random.randint(1, 20)

# 返回列表中的一個隨機元素。
$ randfruit = renpy.random.choice(['apple', 'orange', 'plum'])
  • renpy.random.Random(seed=None)

    返回一個新的隨機數生成器對象。與主隨機數生成器不同,新的對象使用指定的值作為種子。

SDL link

通過函數 renpy.get_sdl_dll() 可以接入SDL2動態連結庫(dll),之後即可直接使用SDL2的函數了。 不過,通常要求有一些Python ctypes模組的知識,才能正確使用SDL2的函數。

Ren’Py不保證包含的SDL2版本編譯後包含或不包含某些特性(feature)。 某些平台可以運行,但其他平台可能會報錯。 使用這些函數的返回值之前需要確認是否返回了None。

下面的例子中,窗口位置資訊來源於SDL2:

init python:

    import ctypes

    def get_window_position():
        """
        通過SDL2檢查窗口坐標。返回以窗口左上角為原點坐標的(x, y)值。如果是未知坐標也會返回(0, 0)。
        """

        sdl = renpy.get_sdl_dll()

        if sdl is None:
            return (0, 0)

        win = renpy.get_sdl_window_pointer()

        if win is None:
            return (0, 0)

        SDL_GetWindowPosition = sdl.SDL_GetWindowPosition

        x = ctypes.c_int()
        y = ctypes.c_int()

        result = sdl.SDL_GetWindowPosition(win, ctypes.byref(x), ctypes.byref(y))

        return result
renpy.get_sdl_dll() link

該函數返回一個ctypes.cdll對象,指向Ren’Py正在使用的SDL2實例中的庫。

如果無法獲取,則返回None。

renpy.get_sdl_window_pointer() link
Return type:

ctypes.c_void_p | None

返回主窗口的指針。如果主窗口沒有顯示(或發生其他問題),返回None。

其他林林總總 link

renpy.add_python_directory(path) link

path 添加在Python模組(module)和包(package)的路徑列表中。這個路勁應該是一個遊戲目錄相對路勁的字串。必須在import語句之前調用該函數。

renpy.add_to_all_stores(name, value) link

在創作者定義的命名空間中,添加名為 name 的變數,值為 value 。 如果同名變數已存在,則不做任何操作。 該函數只能在init代碼塊中運行。遊戲啟動後再運行該函數將報錯。

renpy.can_fullscreen() link

當前平台支持全螢幕模式就返回True,否則返回False.

renpy.capture_focus(name='default') link

若某個可視組件當前獲得焦點,捕獲該組件的包圍矩形,並將其儲存為 name。 若沒有可視組件獲得焦點,移除名為 name 的儲存內容。

保存遊戲時,捕獲的焦點區域不會同時保存。

name

該參數應是一個字串。入參值“tooltip”是特殊的,會自動捕獲可視組件提示區域。

renpy.choice_for_skipping() link

告訴Ren’Py即將出現一個選項。該函數當前有兩種影響:

  • 如果Ren’Py正在跳過(skip),並且“跳過後面選項”設置為停止跳過,那麼跳過就會終止。

  • 觸發自動保存。

renpy.clear_capture_focus(name='default') link

清除名為 name 的焦點捕獲。

renpy.clear_game_runtime() link

重設遊戲運行時間計數器。

renpy.clear_retain(layer='screens', prefix='_retain') link

清空所有留存的界面。

renpy.confirm(message) link

該函數可以彈出一個包含指定資訊的 “確認/取消” 提示界面,並在用戶點擊任意選項後隱藏界面。

如果用戶點擊“確認”則返回True,如果用戶點擊“取消”則返回False。

message

需要顯示的提示資訊。

Confirm() 是一個類似功能的行為(action)。

renpy.count_dialogue_blocks() link

返回遊戲原生語言的對話段落數量。

renpy.count_newly_seen_dialogue_blocks() link

返回本次會話(session)中用戶首次看到的對話段落數量。

renpy.count_seen_dialogue_blocks() link

返回用戶在當前遊戲進度中看過的所有對話段落數量。

renpy.display_notify(message) link

renpy.notify() 函數的默認實現。

renpy.focus_coordinates() link

該函數會嘗試找到當前獲得焦點可視組件的坐標。如果成功找到,返回一個(x, y, w, h)元組。如果沒有找到,返回一個(None, None, None, None)元組。

renpy.force_autosave(take_screenshot=False, block=False) link

強制後台自動存檔。

take_screenshot

若為True,進行新的截圖。若為False,使用已存在的截圖。

block

若為True,將屏蔽所有事件和操作,直到自動存檔完成。

renpy.free_memory() link

嘗試釋放一些記憶體。在運行基於renpy的minigame前很有用。

renpy.full_restart(transition=False, label='_invoke_main_menu', target='_main_menu', save=False) link

讓Ren’Py重啟,將用戶帶回到主選單。

transition

如果給定了轉場,就運行轉場;如果這項是None則不運行轉場;如果這項是False,就用 config.end_game_transition()

save

若為True,將先存檔在 _quit_slot,然後讓Ren’Py重啟,將用戶帶回到主選單。

renpy.get_game_runtime() link

返回遊戲運行時間計數器。

遊戲運行時間計數器返回用戶從頂層上下文(context)等待用戶輸入經過的秒數。(在主選單和遊戲菜單消耗的時間不計入。)

renpy.get_image_load_log(age=None) link

圖像載入啟用日誌生成器。對最後100項圖像載入來說,該函數返回:

  • 圖像載入的時間(1970-01-01 00:00:00 UTC開始計算的秒數)。

  • 載入圖像檔案名。

  • 如果圖像預載入返回True,如果延遲載入返回False。

輸出結果按從新到舊排序。

age

如果不是None,只統計經過 age 秒之後載入的圖像。

在config.developer = True的情況下,才保存圖像載入日誌。

renpy.get_menu_args() link

返回一個元組,其中包含傳給當前menu語句的所有入參(以元組形式)和所有關鍵字入參(以字典形式)。

renpy.get_mouse_name(interaction=False) link

返回顯示滑鼠名稱。

interaction

若為True,根據互動類型獲取滑鼠名稱。(極少使用)

renpy.get_mouse_pos() link

返回一個(x, y)元組,表示滑鼠指針或當前觸摸位置的坐標。如果設備不支持滑鼠並且當前沒有被觸摸,x和y值無意義。

renpy.get_on_battery() link

如果Ren’Py當前運行設備使用內部電池供電,則返回True; 如果當前運行設備使用外部電源,則返回False。

renpy.get_physical_size() link

返回物理窗口的尺寸。

renpy.get_refresh_rate(precision=5) link

返回當前螢幕的刷新率,這是一個fps浮點數。

precision

Ren’Py能獲得的裸數據,fps向下取整。就是說,如果顯示器運行在59.95fps,那麼函數返回的就是59fps。 precision參數進一步降低了實際顯示的幀數,只能能pricision的整倍數。

由於所有顯示器幀率都是5的整倍數(25、30、60、75和120),該函數可能會提高準確性。將precision設置為1表示禁用這個功能。

renpy.get_renderer_info() link

返回一個字典,表示Ren’Py當前使用的渲染器資訊。自定中包含下列鍵(key):

"renderer"

"gl""sw" ,分別對應OpenGL和軟體渲染。

"resizable"

僅當窗口可重新調整尺寸的情況下為True。

"additive"

僅當那個渲染器支持額外混合(blend)的情況下為True。

"model"

如果支持基於模型渲染器,則為True。

另外,鍵值也可能存在特定渲染器。這個字典應該被認為是不能修改的。可視組件啟動後(也就是初始化段落已經結束),該函數應該只被調用一次。

renpy.get_say_attributes() link

獲得與當前say語句相關的屬性(attribute),如果沒有相關屬性(attribute)則返回None。

只有執行或預載入一條say語句時,該函數才可用。

renpy.get_skipping() link

如果Ren’Py跳過中則返回True,如果Ren’Py快速跳過中則返回“fast”,如果Ren’Py不在跳過狀態則返回False。

renpy.get_transition(layer=None) link

獲取 lay 的轉場(transition),如果 layer 為None則獲取整個場景(scene)的轉場。該函數返回了在下次交互行為中,隊列上層的轉場(transition)。如果不存在符合條件的轉場則返回None。

renpy.iconify() link

遊戲窗口最小化。

renpy.include_module(name) link

類似於 renpy.load_module() ,但不會直接載入對應模組,而是根據當前AST碼穿插進入初始化隊列。

載入初始化優先度數值不能比包含模組的代碼塊更小。 比如,你的模組包含一個優先度為init 10的代碼塊,那載入的最低優先度數值也至少是10.

載入模組的部分只能用在初始化程式碼塊(init block)中。

invoke_in_main_thread(fn, *args, **kwargs) link

在主執行緒中使用指定入參運行指定函數。該函數運行在類似於事件處理器的交互上下文中。 這是為了能從其他執行緒調用該函數。其他執行緒可以使用 renpy.invoke_in_thread() 函數創建。

如果在單一執行緒中存在多個可調用的函數,這些函數並不一定會按預計的順序依次執行。

def ran_in_a_thread():
    renpy.invoke_in_main_thread(a)
    renpy.invoke_in_main_thread(b)

在這個例子中,a 肯定先返回,然後再調用 b。從幾個不同執行緒的調用則不一定按此順序。

在初始化階段不能調用該函數。

renpy.invoke_in_thread(fn, *args, **kwargs) link

使用後台執行緒調用函數 fn ,傳入該函數收到的所有入參。執行緒返回後重新啟動交互行為。

該函數創建一個守護執行緒(daemon thread),當Ren’Py關閉後這個執行緒也會自動停止。

該執行緒使用Ren’Py的API能做的事情非常受限。可以調用下列函數修改儲存區的變數:

最好在主執行緒中使用其他Ren’Py的API。

然而該函數還無法在Web平台正常運行,僅僅能在不報錯的情況下直接返回。

renpy.is_init_phase() link

當Ren’Py正在執行init代碼時返回True,其他情況返回False.

renpy.is_mouse_visible() link

如果滑鼠光刻可見則返回True,否則返回False。

renpy.is_seen(ever=True) link

如果用戶已經看過當前的行,則返回True。

如果 ever 為True,我們檢查用戶是否看過該行。如果 ever 為False,我們檢查該行是否在當前遊戲過程中被看過。

renpy.is_skipping() link

如果Ren’Py當前正處於跳過(skipping)狀態則返回True,否則返回False。

renpy.is_start_interact() link

如果在當前交互行為中調用了restart_interaction,就返回True。該函數可以用於確定是否某個交互行為已經開始,或者已重新開始。

renpy.language_tailor(chars, cls) link

該函數可用於替換unicode字元的換行類。例如,字串的換行類可以將其設置為某個象形文字的編碼,這個字元的前後就會換行。

chars

一個字串,包含訂製的每一個字元。

cls

A string giving a character class. This should be one of the classes defined in Table 1 of UAX #14: Unicode Line Breaking Algorithm. 一個字串,指定字串類。其須是下表定義中的其中一個類:UAX #14: Unicode Line Breaking Algorithm

last_say() link

返回一個對象,包含最後一條say語句的資訊。

在某個say語句中調用該函數,若是某個普通Character對象使用say語句,則返回結果就是 當前 這條say語句,而不是上一句。

who

發言角色。通常是一個 Character() 對象,不一定有。

what

一個字串,表示對話內容。如果對話還未顯示,則可能是None。這種情況會發生在遊戲剛啟動時。

args

一個元組,包含傳入最後一條say語句的入參。

kwargs

一個字典,包含傳入最後一條say語句的關鍵字入參。

Warning

與其他類似函數一樣,該函數的返回對象短期內還在被其他地方使用或修改。不建議在存檔或回滾相關操作中使用此函數的返回對象。

renpy.load_module(name) link

該函數載入名為 name 的Ren’Py模組(module)。Ren’Py模組包含的Ren’Py腳本會載入進通用(儲存)命名空間。Ren’Py腳本包含在名為name.rpym或name.rpymc的文件中。如果某個.rpym文件存在,並且比對應的.rpymc文件更新,就載入.rpym文件並創建新的.rpymc文件。

模組中所有的初始化語句塊(block)(以及其他初始化程式碼)都在函數返回前運行。模組名未找到或有歧義的情況下會報錯。

應該僅在初始化語句塊(init block)中載入模組。

renpy.load_string(s, filename='<string>') link

s 作為Ren’Py腳本載入。

返回 s 中第一個語句的名稱。

filename 是載入 s 後生成的所有語句對應的檔案名稱。 (譯者註:該函數內部調用renpy.game.script.load_string,要求必須有一個檔案名入參。)

renpy.maximum_framerate(t) link

強制Ren’Py在 t 秒內以最大幀率重繪界面。如果 t 是None,則不要求使用最大幀率。

renpy.munge(name, filename=None) link

munge式命名 name ,開頭必須是雙下劃線“__”。

filename

需要使用munge處理的檔案名。若為None,就使用調用此次munge的檔案名。

renpy.not_infinite_loop(delay) link

將無限循環探測計時器重設為 delay 秒。

renpy.notify(message) link

讓Ren’Py使用notify界面顯示 message 。默認情況下,顯示的 message 消息會以dissolve方式出現,顯示2秒,最後以dissolve方式消失。

對一些不會產生回調函數的行為(action),比如截圖和快速保存,該函數很有效。

一次只能顯示一條通知。顯示第二條通知時,會直接替換第一條通知。

該函數只是調用 config.notify 。可以通過配置項重新實現並替換原函數。

renpy.prediction() link

若Ren’Py處於預載入階段則返回True。

renpy.queue_event(name, up=False, **kwargs) link

使用給定的 name 將某個事件放入消息隊列。 name 應該是在 config.keymap() 中列出的事件名稱之一,或者是這些事件組成的列表。

up

當事件開始階段(例如,鍵盤按鍵被按下)時,這項應該是False。當事件結束(比如按鍵被鬆開)是,這項才會變成True。

當調用該函數時,事件會被同時放入消息隊列。該函數不能替換事件——替換會修改事件的順序。(替換事件可以使用 config.keymap() 。)

該函數是執行緒安全的(threadsafe)。

renpy.quit(relaunch=False, status=0) link

該函數讓Ren’Py完全退出。

relaunch

若為True,Ren’Py會在退出前運行自身的一個副本。

status

Ren’Py返回給操作系統的狀態代碼。大體來說,0表示成功,負數表示失敗。

renpy.quit_event() link

觸發一個退出(quit)事件,比如用戶點擊了窗口的退出按鈕。

renpy.reset_physical_size() link

嘗試將物理窗口尺寸設置為renpy.config配置的指定值。(就是配置的screen_width和screen_height。)這在全螢幕模式下超出螢幕的情況有副作用。

renpy.restart_interaction() link

重新啟動當前交互行為。包括以下內容,將顯示的圖像添加到場景(scene),重新規劃界面(screen),並啟動所有隊列中的轉場(transition)。

僅在某個交互行為中,該函數才會執行所有工作。交互行為之外,該函數不產生任何效果。

renpy.screenshot(filename) link

將截螢幕保護程式存為 filename

如果截螢幕保護程式存成功就返回True。如果由於某些原因保存失敗就返回False。

renpy.screenshot_to_bytes(size) link

以二進位制對象形式返回一個截圖,可以作為參數傳入 im.Data() 。該二進位制對象將是一張png格式圖片,例如:

$ data = renpy.screenshot_to_bytes((640, 360))
show expression im.Data(data, "screenshot.png"):
    align (0, 0)

將顯示一個截圖圖像。這個二進位制對象可以儲存到存檔文件和持久化數據中。不過這個對象可能很大,注意不要儲存太多類似的對象。

size

截圖後重新縮放的目標尺寸。若為None,截圖將按用戶窗口的尺寸進行調整,不包含窗口的標題欄。

該函數運行可能比較慢,通常用在類似存檔的截圖需求中,而不應該用在需要即時生效的功能中。

renpy.scry() link

返回當前語句的scry對象。

scry對象告知Ren’Py當前語句哪些部分未來必定會是True。目前的版本中,scry對象有下列欄位:

nvl_clear

如果在下一個交互行為之前會執行一個 nvl clear 語句則為True。

say

如果在下一個交互行為之前會執行一個 say 語句則為True。

menu_with_caption

如果在下一個交互行為之前會執行一個含標題的 menu 語句則為True。

who

如果在下一個交互行為之前會執行一個 say 語句或含標題的 menu 語句,則角色對象將使用該欄位。

scry對象有一個next()方法,可以返回下一條將執行語句的scry對象。如果沒有下一條將執行的語句,則返回None。

Warning

與其他類似函數一樣,該函數的返回對象短期內還在被其他地方使用或修改。不建議在存檔或回滾相關操作中使用此函數的返回對象。

renpy.set_mouse_pos(x, y, duration=0) link

讓滑鼠指針跳到入參x和y指定的位置。如果設備沒有滑鼠指針,則沒有效果。

duration

執行滑鼠指針移動的時間,單位為秒。這段時間內,滑鼠可能不響應用戶操作。

renpy.set_physical_size(size) link

嘗試將物理窗口的尺寸設置為 size 。這對全螢幕模式下的有顯示超出螢幕的副作用。

renpy.shown_window() link

調用該函數確認窗口已經顯示。使用“window show”語句的交互行為,會顯示一個空窗口,無論該函數是否被調用。

renpy.split_properties(properties, *prefixes) link

properties 切割為多個字典,每一個都帶上前綴 prefix 。 該函數輪流使用每一個 prefix 檢查 properties 中每一個鍵(key)。 如果匹配到某個前綴,將就鍵(key)的前綴部分去掉作為最終字典的鍵(key)。

如果沒有匹配到前綴,會拋出異常。(空字串,“”,可以用作最後一個前綴,創建一個全匹配字典。)

例如,下面的語句將“text”開頭的properties分割:

text_properties, button_properties = renpy.split_properties("text_", "")
renpy.transition(trans, layer=None, always=False) link

設置下次交互行為使用的轉場(transition)。

layer

轉場應用於這個參數表示的圖層(layer)。若為None,轉場應用於整個場景(scene)。

always

若為False,函數遵循定義的轉場環境設定設置。若為True,使用運行轉場。

renpy.vibrate(duration) link

讓設備震動 duration 秒。現在只支持安卓。

layout.yesno_screen(message, yes=None, no=None) link

該函數產生一個yes/no提示界面,並顯示給定的提示資訊。當用於選擇了yes或者no之後,就隱藏界面。

message

顯示的提示消息。

yes

用戶選擇yes後運行的行為(action)。

no

用戶選擇no後運行的行為(action)。