頭像 link
許多視覺小說會在角色發言時,在對話內容旁邊顯示一張該角色的頭像。Ren’Py把這個頭像稱作頭像(side image),並支持自動選擇和顯示對話的頭像。
使用頭像的前提是,定義 Character()
時使用一個關聯的圖像標籤(tag):
define e = Character("艾琳", image="eileen")
當某個帶有關聯圖像標籤的角色發言時,Ren’Py會創建一個圖像屬性(attribute)池。關聯圖像標籤會被添加到這個池,當前圖像屬性與那個圖像標籤關聯。
根據圖像標籤選擇關聯的頭像時,Ren’Py會嘗試在圖像屬性池中找到帶有標籤“side”且帶有盡可能大的屬性值的圖片。如果沒有找到符合條件的圖片,或者找到多個帶有相同屬性值的圖像,就顯示 Null
。
除了tag標籤,在屬性池中至少需要有一項屬性。如果沒有,頭像不會顯示。
例如,假設我們有如下腳本:
define e = Character("艾琳", image="eileen")
image eileen happy = "eileen_happy.png"
image eileen concerned = "eileen_concerned.png"
image side eileen happy = "side_eileen_happy.png"
image side eileen = "side_eileen.png"
label start:
show eileen happy
e "我們把線段的這端稱作點A。"
e concerned "線段的另一端稱作點B。"
在point A,角色 e
正在發言,關聯的圖像標籤是“eileen”。當“eileen happy”圖像顯示時,圖像屬性池的標籤裡有“eileen”和“happy”。我們尋找帶有“side”圖像標籤的圖像,以及盡可能多的屬性——我們就能匹配到“side eileen happy”,最終顯示為頭像。
在point B,顯示的圖像是“eileen concerned”。當前屬性池裡是“eileen”和“concerned”。唯一匹配的圖像是“side eileen”,這也是Ren’Py最終選用的圖像。如果存在一個“side concerned”圖像,由於其命名不清晰,Ren’Py不會顯示它。
不可視角色 link
另一個頭像的用處,是當用戶角色的對話內容,顯示一個頭像。做法是將某個圖像與角色關聯,然後使用帶圖形結構的say語句選擇顯示的頭像。
舉例:
define p = Character("Player", image="player")
image side player happy = "side_player_happy.png"
image side player concerned = "side_player_concerned.png"
label start:
p happy "這裡會顯示 'side player happy' 圖像。"
p "這裡會顯示 'side player happy' 。"
p concerned "這裡會顯示 'side player concerned' 。"
配置和儲存區變數 link
有一些頭像的屬性由配置項控制。
- _side_image_tag = None link
- define config.side_image_tag = None link
若非None,頭像會追蹤給定的圖像標籤(tag),而不是追蹤當前發言角色的關聯圖像。例如:
define e = Character("艾琳", image="eileen") define config.side_image_tag = "eileen"
會讓頭像追蹤圖像標籤“eileen”。這個標籤與角色
e
關聯。
- define config.side_image_only_not_showing = False link
當設置為True時,只在帶這個標籤的某個圖像還沒有顯示在界面上,才會顯示頭像。
- _side_image_prefix_tag = None link
- define config.side_image_prefix_tag = 'side' link
若 _side_image_prefix_tag不是None,其使用 config.side_image_prefix_tag 的設置。 前綴用於搜索搜索頭像。
- define config.side_image_null = Null() link
不顯示頭像時,顯示空的可視組件。空的頭像也可以改變,只不過變為其他的空可視組件。 一個這樣做的原因是,設置了空組件的邊界後(例如,Null(width=200, height=150)),能夠防止dissolve效果被中途割裂。
- define config.side_image_same_transform = None link
若非None,當新的頭像與前一個頭像共享同一個圖像標籤時,這個transform就會使用。
- define config.side_image_change_transform = None link
若非None,當新的頭像與前一個頭像不共享圖像標籤(或新舊頭像之一不存在)時,這個transform就會使用。
變換和轉場 link
config.side_image_same_transform
和
config.side_image_change_transform
使用兩個參數——新舊兩個頭像可視組件——調用時,每次顯示的圖像。可以是讓頭像運行或者使用轉場效果。
下面是一個例子,當關聯圖像改變時,讓頭像滑入和滑出:
transform change_transform(old, new):
contains:
old
yalign 1.0
xpos 0.0 xanchor 0.0
linear 0.2 xanchor 1.0
contains:
new
yalign 1.0
xpos 0.0 xanchor 1.0
linear 0.2 xanchor 0.0
define config.side_image_change_transform = change_transform
當 SideImage()
縮小時,最好啟用 Dissolve()
的mipmap功能。
transform same_transform(old, new):
old
new with Dissolve(0.2, alpha=True, mipmap=True)
define config.side_image_same_transform = same_transform
相關函數 link
- renpy.get_side_image(prefix_tag, image_tag=None, not_showing=True, layer='master') link
這個函數嘗試找到圖像顯示為頭像。
由某個圖像屬性(attribute)的集合決定啟用哪個頭像。如果給出了 image_tag ,函數從這個圖像標籤(tag)得到圖像屬性(attribute)。否則,函數從當前顯示的角色獲取圖像屬性。
然後函數會根據標籤 prefix_tag 和其他一些屬性尋找合適的圖像,並返回找到的圖像。
如果 not_showing 的值為True,這個函數將只返回一個頭像,前提是圖像使用的屬性(attribute)不存在於當前界面上。 如果 not_showing 的值為None,則根據
config.side_image_only_not_showing
的配置決定。如果 layer 的值是None,當前顯示的圖像標籤使用默認圖層。
- renpy.set_tag_attributes(name, layer=None) link
當對應標籤的圖像不在顯示時,該函數會將圖像屬性(attribute)與標籤進行關聯。 該函數的主要用途是,直接設置頭像所使用的圖像屬性。
例如:
$ renpy.set_tag_attributes("lucy mad") $ renpy.say(l, "I'm rather cross.")
和
l mad "I'm rather cross."
是等效的。