文本 link

Ren’Py內涵多種方式用於顯示文本。 saymenu 語句就會用到文本顯示。 用戶介面通常都包含文本,顯示時使用 texttextbutton, 和 label screen語言語句。這些screen語句加上其他的函數,可以創建 Text() 文本組件,並在界面上展示出來。

文本組件用於管理顯示給用戶的文本內容。文本組件按以下順序執行行為:

  1. 轉化文本。
  2. 在文本中內插數據
  3. 使用樣式和文本標籤將文本樣式化。
  4. 給樣式化後的文本布局。
  5. 將文本內容繪製到界面上。

本節內容討論在Ren’Py中處理文本顯示問題的過程。

跳脫字元 link

對Ren’Py來說,有3個特殊字元能控制文本顯示。創作者需要注意,這3個字元的寫法不要讓引擎產生曲解。

(反斜槓)

反斜槓用於Ren’Py字串中的字元轉義。一些常見的轉義符號如下:

" (反斜槓雙引號)
兩端用雙引號標識的字串中含有一個雙引號。
' (反斜槓單引號)
兩端用單引號標識的字串中含有一個單引號。
\ (雙引號空格)
在Ren’Py字串中含有一個額外的空格。默認情況下,Ren’Py腳本會將一段連續的空白轉為一個空格字元。
\n (反斜槓-字元n)
文本含有一個換行符。
\ (反斜槓-反斜槓)
文本含有一個反斜槓字元。
[ (左方括號)
左方括號用於轉義在文本中內插的值。如果要在文本中包含左方括號,需要寫兩個左方括號 —— [[
{ (左花括號)
左花括號用於轉義文本標籤(tag)。如果要在文本中包含左花括號,需要寫兩個左花括號 —— {{

內插數值 link

Ren’Py支持在文本字串中內插數值。例如,假設使用者名稱字存儲在 playername 變數中,我們可以寫這樣一行對話:

g "歡迎來到貓耳協會, [playername] !"

Ren’Py會在全局存儲區尋找同名變數並內插到文本中。當我們在某個界面使用一個文本控制項時,Ren’Py也會將預定義的界面本地變數值內插到控制項中。(這個值也可以通過向文本控制項傳入一個explicit scope參數來覆蓋。)

Ren’Py並不限制只允許內插簡單變數值,也支持內插欄位(field)和元組元素值。以下寫法也是可以的:

g "我姓 [player.names[0]]。"

顯示數值之前可以先進行格式化。下面的例子顯示的是一個保留小數點後兩位的浮點數:

$ percent = 100.0 * points / max_points
g "我百分之 [percent:.2] 喜歡你!"

Ren’Py字串的數值內插符合 PEP 3101 的字串格式規範。 Ren’Py字串內插使用 [ ,因為 { 被用於文本標籤(tag)了。

還有,Ren’Py支持!s、!r、!q和!t等轉換標記。!q轉換標記表示文本標籤(tag)內引號已經正確匹配和使用,顯示字串時不會轉義為不希望出現的格式。舉例:

g "你別想唬弄我, [playername!q] !"

!t轉換標記會轉換或計算內插字串的值:

if points > 5:
    $ mood = _("高興")
else:
    $ mood = _("頭大")

g "見到你我很 [mood!t] 。"

!i 標識會在字串中執行一次額外的插值:

define earned_points_info = _("[points]{image=points.png} 贏得點數")
g "我很高興看到你 [earned_points_info!ti] "

界面語言中會經常用到,詳見 常量文本

!u 標識強制將(英文)文本轉為大寫, !l 標識強制將(英文)文本轉為小寫。 !c 標識將首字母大寫。 這些標識可以聯用,比如使用 !cl 可以將首字母大寫,後面所有文本強制小寫。

樣式化和文本標籤(tag) link

在Ren’Py中,文本有兩種方式獲取樣式(style)訊息。第一種是,根據整個文本段落(block)應用的樣式獲取。請詳見 樣式系統文本樣式特性 部分的內容。

第二種是,透過使用文本標籤(tag)。文本標籤(tag)可用於一個文本段落(block)中一部分的樣式化,也可以用於程序中所有文本段落中一部分的樣式化。如果你發現自己在文本的每一行裡都應用了同樣的文本標籤,可以考慮使用樣式代替這種做法。

總共有兩種文本標籤。某些文本標籤是自閉合的,而有些文本標籤需要成對的閉合標籤。當多個成對的閉合標籤出現時,閉合順序必須是後出現的標籤先閉合——Ren’Py會拒絕不正確匹配。例如:

# 這行是正確的
"Plain {b}Bold {i}Bold-Italic{/i} Bold{/b} Plain"

# 這行是不正確的,並會引起報錯或不正確的畫面表現
"Plain {b}Bold {i}Bold-Italic{/b} Italic{/i} Plain"

某些文本標籤可以帶一個入參。帶入參的文本標籤後面會帶一個等號(=),後面跟參數值。入參不能含有右花括號(})。入參的含義根據不同的文本標籤而不同。

通用文本標籤 link

通用文本標籤可以應用於如下文本:

a link

錨點標籤在其自身和自己的閉合標籤內,創建了一個超連結。超連結的行為表現由 hyperlink_functions 樣式特性控制。 預設的處理包含以下行為:

  • 當入參以 jump: 開頭,入參的其餘部分是要跳轉的腳本標籤(label)名。
  • 當入參以 call: 開頭,入參的其餘部分是要調用的腳本標籤(label)名。通常來說,call執行完後會回到當前的Ren’Py語句。
  • 當入參以 call_in_new_context: 開頭,入參的其餘部分是某個新的上下文(使用 renpy.call_in_new_context() 函數)中需要調用的腳本標籤名。
  • 當入參以 show: 開頭,入參的其餘部分是待顯示的界面。
  • 當入參以 showmenu: 開頭,入參的其餘部分是待顯示的遊戲菜單界面。
  • 除了以上情況,入參是一個URL,可以使用系統web瀏覽器打開。

如果在入參中沒有顯式的協議頭, config.hyperlink_protocol 中配置的值會自動添加到入參頭部。如果 config.hyperlink_protocol 已經被配置為“jump”,{a=label}跟{a=jump:label}就是等價的。創作者可以使用 config.hyperlink_handlers 配置一個新的協議名稱。

label test:

    e "你可以訪問 {a=https://renpy.org}Ren'Py's 首頁{/a}。"

    e "或者 {a=jump:more_text}這裡來得到更多訊息{/a}."

    return

label more_text:

    e "在阿肯薩斯的溫泉,有一座可以作為拍照景點的艾爾·卡彭雕像。"

    e "這就是更多訊息,但不是你想要的那種對不?"

    return
alpha link

alpha文本標籤(tag)指定一個透明度,渲染範圍為自身及其閉合標籤內的文本。透明度是一個介於0.0和1.0之間的數值,分別對應完全透明和完全不透明。若這個數值前綴帶有+或者-,則表示是在原有透明度基礎上做相應增減。若這個數值前綴帶有 *, 該數值與原值相乘的積作為透明度。

"{alpha=0.1}這字完全不能看!{/alpha}"
"{alpha=-0.1}現在字的透明度少了10%{/alpha}"
"{alpha=*0.5}字的透明度是預設的50%。{/alpha}"
alt link

alt文本標籤(tag)將阻止文本內容被渲染,不過TTS系統依然有效。

g "Good to see you! {image=heart.png}{alt}heart{/alt}"

還可以查看 alt 角色相關內容.

art link

art文本標籤(tag)會把閉合標籤內的文本作為ruby文本的頂部文字顯示。 詳見 Ruby文本

b link

粗體標籤,將自身及其畢業標籤內的文本渲染為粗體。

"一個 {b}粗體測試{/b}。"
color link

顏色文本標籤將自身及其閉合標籤內的文本渲染為特定的顏色值。顏色值使用#rgb、#rgba、#rrggbb或#rrggbbaa格式。

"{color=#f00}紅色{/color}, {color=#00ff00}綠色{/color}, {color=#0000ffff}藍色{/color}"
cps link

“每秒鐘字元數”標籤設置了文本顯示速度,作用範圍為標籤自身及其閉合標籤範圍內文本。若入參開頭帶有一個星號和數字n,表示使用文本n倍速顯示。如果沒有星號,則數字n表示每秒顯示n個字元。

"{cps=20}固定速度{/cps} {cps=*2}兩倍速{/cps}
font link

字體標籤將標籤自身及其閉合區間之間的文本渲染為指定的字體。入參即使用的字體檔案名。

"嘗試使用字體 {font=mikachan.ttf}mikachan font{/font}。"
i link

斜體標籤將自身及其閉合標籤之間的文本渲染為斜體。

"遊覽 {i}比薩斜塔{/i}。"
image link

圖片標籤是一個自閉合標籤,作用是在文本中內插一個圖片。內插的圖片高度應該和單行文本的高度一致。入參可以是圖片檔案名,或者使用image語句定義的圖像名。

g "見到你真好! {image=heart.png}{alt}heart{/alt}"
k link

字偶距標籤調整文本字偶距,作用範圍為其自身及其閉合標籤之間的文本。其使用一個浮點數值作為入參,該值給定了字元之間增加的距離,單位是像素(該值也可以是負值,表示字元之間縮小的距離)。

"{k=-.5}Negative{/k} Normal {k=.5}Positive{/k}"
noalt link

noalt標籤將防止文本被TTS系統使用。經常與 alt 標籤一起使用,提供可見選項。

g "見到你真好! {noalt}<3{/noalt}{alt}heart{/alt}"
outlinecolor link

outlinecolor將文本的所有描邊(包括陰影)顏色改為指定顏色,顏色格式為 #rgb、#rgba、#rrggbb或#rrggbbaa。

"讓我們加一個{outlinecolor=#00ff00}綠色{/outlinecolor} 描邊。"
plain link

plain標籤保證文本沒有任何加粗、斜體、下劃線或刪除線樣式。

"{b}加粗。{plain}沒有效果。{/plain} 加粗。{/b}"
rb link

可選的下標字元標識了標籤自身及其閉合標籤範圍內文本。詳情參考 Ruby Text

rt link

可選的上標字元標識了標籤自身及其閉合標籤範圍內文本。詳情參考 Ruby Text

s link

刪除線標籤在其自身及其閉合標籤之間的文本上畫一條刪除線。

g "很高興 {s}見到你{/s}。"
size link

字號標籤改變了其自己及其閉合標籤內的文本字號。入參應該是一個整數,可前綴+或者-。如果入參只是一個整數,那麼字體高度就是那個整數的值,單位為像素。如果帶有+或者-的話,字號在原值基礎上進行增縮。

"{size=+10}變大{/size} {size=-10}變小{/size} {size=24}24 px{/size}."
space link

空白標籤是一個自閉合標籤,在一行文本內內插一段水平的空白。入參是一個整數,表示內插的空白寬度,單位為像素。

"空白之前。{space=30}空白之後。"
u link

下劃線標籤在其自身及其閉合標籤之間的文本添加下劃線。

g "很高興 {u}見到{/u} 你。"
vspace link

垂直空白標籤是一個自閉合標籤,在文本的兩行之間內插一段豎直的空白。入參是一個整數,表示內插的空白高度,單位為像素。

"第一行{vspace=30}第二行"
# link

以#符號開頭的文本標籤會被忽略,可以用於腳本除錯。

"New{#playlist}"

對話文本標籤 link

只能應用於對話的文本標籤如下:

done link

在done標籤後面的文本不會顯示。那麼你為什麼會要這段文本? 當 adjust_spacing 設置為True時,可以避免文本字間距異常。

done標籤出現後,該行對話不會添加到歷史快取中。如果nw標籤出現,必須用在done標籤之前。

g "Looks like they're{nw}{done} playing with their trebuchet again."
g "看起來他們{nw}{done} 又在玩投石機。"
show trebuchet
g "看起來他們{fast} 又在玩投石機。"
fast link

如果一行文本中出現了fast標籤,在該標籤前面的文本內容會立即顯示,即使文本顯示速度被設置為低速模式。fast標籤是一個自閉合的標籤。

g "看起來他們{nw}"
show trebuchet
g "看起來他們{fast} 又在玩投石機。"
nw link

“不等待”標籤是一個自閉合標籤,該標籤前的那行文本內容在顯示一次後會立刻消失。

g "看起來他們{nw}"
show trebuchet
g "看起來他們{fast} 又在玩投石機。"

“不等待”標籤依然會等待語音播放完再執行文本消失行為。

p link

段落暫停標籤是一個自閉合標籤,在當前文本段落中內插一個終止標記,等待用戶點擊後繼續顯示後面的內容。如果標籤中帶有一個入參,入參是一個數值,代表等待用戶點擊的時間(單位為秒)。等待期間用戶沒有點擊行為的話,等待時間結束後也會自動進入後續內容。

"Line 1{p}Line 2{p=1.0}Line 3"
w link

等待標籤是一個自閉合的標籤,等待用戶點擊後繼續顯示後面的內容。如果標籤中帶有一個入參,入參是一個數值,代表等待用戶點擊的時間(單位為秒)。等待期間用戶沒有點擊行為的話,等待時間結束後也會自動進入後續內容。

"Line 1{w} Line 1{w=1.0} Line 1"

也可以使用Python定義出 custom text tags

樣式文本標籤 link

Ren’Py支持文本標籤使用各種樣式。需要使用的話,標籤的入參被用作樣式名稱。例如,{=mystyle}標籤就會使用 mystyle 樣式。

在標籤和其對應的閉合標籤之間的文本,將會擁有定義在樣式中的以下特性(property):

  • antialias
  • font
  • size
  • bold
  • italic
  • underline
  • strikethrough
  • color
  • black_color
  • kerning

非英語 link

Ren’Py包含英語和很多其他語言的默認字體。考慮到字體庫大小問題,Ren’Py沒有包含需要渲染的語種,包括中日韓語。如果需要支持那些語言,在項目開頭就需要更改使用的字體。

Ren’Py在之後的版本可能會支持世界上絕大多數的語言,而不需要做特別配置。韓語是在各個字之間不帶空格書寫的語言。Ren’Py有一個特殊模式可以支持帶空格的韓語,可以做如下設置啟用:

define gui.language = "korean-with-spaces"

這也可以通過修改gui.rpy文件中“unicode”項的預設值實現。

日語在換行方面有許多規則。我們推薦開始先設置為“japanese-normal”,進階使用“japanese-loose”或者“japanese-strict”,分別對應換行比較多或者比較少的情況。:

define gui.language = "japanese-loose"

表意文字語言經常含有大量換行。要啟用更快但運算量更少的換行算法的話,使用如下配置:

define gui.language = "greedy"

這種更快的換行算法並不一定要啟用,除非遊戲中需要一次顯示巨量文本,例如在NVL模式下。

後續也可以使用 renpy.language_tailor() 函數配置換行算法。

垂直文本 link

當配置了 vertical 樣式特性,Ren’Py就能生成原生的垂直文本。垂直文本的書寫順序是從上到下,從右往左。

這裡有兩個文本標籤與垂直文本相關。

horiz link

在垂直文本中包含原生水平文本。

vert link

在水平文本中包含原生的垂直文本。(該標籤不會旋轉原生垂直文本內容。)

Note

如果字體中沒有包含垂直文本的字元間隔訊息,Ren’Py會嘗試從水平文本訊息自動計算出垂直文本的字元間隔。在不同的Ren’Py版本中,實際的字元間隔可能並不一致。

Ruby文本 link

Ruby文本(較常用來標明假名或者注音)是一種在某個字元或單詞上方顯示小號文本的文本。以下是幾個步驟可以讓你的遊戲支持Ruby文本。

首先,你必須配置Ruby文本的樣式(style)。需要修改以下樣式特性:

  1. line_leading 特性必須為Ruby文本預留足夠的高度。
  2. 創建一個新的自訂名的樣式(style)。該樣式的特性,比如 size 需要適合Ruby文本。
  3. 新樣式的yoffset必須特別設置,這是為了將Ruby文本升到一般文本基線之上。
  4. 文本樣式的 ruby_style 域應該被設置為上面新創建的樣式。

舉例:

init python:
    style.default.line_leading = 12

    style.ruby_style = Style(style.default)
    style.ruby_style.size = 12
    style.ruby_style.yoffset = -20

    style.default.ruby_style = style.ruby_style

完成Ren’Py的相關配置後,我們就可以使用rt和rb文本標籤,在腳本中包含Ruby文本了。rt標籤用於標識一些字元將被顯示為Ruby文本。如果在Ruby文本前面出現了rb標籤,Ruby文本會與rb標籤內的所有文本中央對齊。如果沒有rb標籤,Ruby文本會與對應的字元左對齊。

舉例:

e "Ruby 可以用來標識假名(東{rt}とう{/rt} 京{rt}きょう{/rt})。"

e "也可以用來翻譯 ({rb}東京{/rb}{rt}Tokyo{/rt})."

確保Ruby文本不會與其他文本內容重疊是創作者的職責。為了防止這種問題的出現,最好在文本上方多預留一些空間。

字體 link

Ren’Py支持TrueType/OpenType字體和字體集,以及基於圖形的字體。

TrueType或OpenType字體會給定字體檔案名。那個字體檔案必須被放在game文件夾裡,或者某個歸檔文件中。

Ren’Py也支持TrueType/OpenType字體集。一個字體集中定義了多種字體。當我們接入一個字體集時,使用從0開始的字體下標,後面跟@符號和檔案名。例如,“0@font.ttc”是字體集font的第一種字體,“1@font.ttc”是字體集font的第二種字體,以此類推。

字體替換 link

config.font_replacement_map 配置項用於字體map圖。字體檔案、加粗和斜體會使用map圖捆綁為一個組合。這個組合就用指定的斜體效果代替系統自動生成的斜體。

這種替換可以實現將“Deja Vu Sans”版本的斜體換成官方的“oblique”版本。(當然你需要先在網路上下載“oblique”字體。)

init python:
    config.font_replacement_map["DejaVuSans.ttf", False, True] = ("DejaVuSans-Oblique.ttf", False, False)

完成替換後可以提升斜體文本的感官效果。

基於圖形的字體 link

透過調用以下字體註冊函數之一,可以註冊基於圖形的字體。註冊時,需要指定字體的名稱、字號、粗體、斜體和下劃線。當所有特性都匹配時,註冊後的字體才可以使用。

renpy.register_bmfont(name=None, size=None, bold=False, italics=False, underline=False, filename=None) link

該函數註冊了一個給定明細的BMFont(點陣圖字體)。請注意,字號、粗體、斜體和下劃線入參只是詢問性質的(用於特性匹配),並不會改變字體的實際效果。

請查看 BMFont首頁 可以找到創建BMFonts的工具。Ren’Py需要filename參數是BMFont文本格式的,其描述了一個32比特字體的訊息。alpha通道應該包含字體訊息,而紅綠藍顏色通道應該被設置為1。圖形文件、字偶距和其他控制訊息都可以從BMFont文件中讀取。

我們推薦你創建的BMFont中包含拉丁字母和主要的標點符號,並確保在Ren’Py的介面上可以正確渲染。

name
一個字串,註冊的字體名稱。
size
一個整數,註冊字體的字號。
bold
一個布爾值,標識註冊字體是否為粗體。
italics
一個布爾值,標識註冊字體是否為斜體。
underline
可以忽略的參數。
filename
包含BMFont控制訊息的文件。
renpy.register_mudgefont(name=None, size=None, bold=False, italics=False, underline=False, filename=None, xml=None, spacewidth=10, default_kern=0, kerns={}) link

該函數註冊了一個給定明細的MudgeFont。請注意,字號、粗體、斜體和下劃線入參只是詢問性質的(用於特性匹配),並不會改變字體的實際效果。

請查看 MudgeFont首頁 可以找到創建BMFonts的工具。Ren’Py假設MudgeFont的xml文件中的字元帶都unicode字元數值,並會忽略所有負值。

name
一個字串,註冊的字體名稱。
size
一個整數,註冊字體的字號。
bold
一個布爾值,標識註冊字體是否為粗體。
italics
一個布爾值,標識註冊字體是否為斜體。
underline
可以忽略的參數。
filename
一個字串,表示包含MudgeFont圖形的文件。該圖形通常是一個TGA文件,也可能是一個PNG或者其他Ren’Py支持的圖片格式。
xml
包含MudgeFont工具生成訊息的xml文件。
spacewidth
表示空格字元的寬度的整數,單位是像素。
default_kern
字元間距的預設值,單位是像素。
kerns
兩字型字串中字元間距的值。
renpy.register_sfont(name=None, size=None, bold=False, italics=False, underline=False, filename=None, spacewidth=10, default_kern=0, kerns={}, charset=u'!"#$%&'()*+, -./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~') link

該函數註冊了一個給定明細的SFont。請注意,字號、粗體、斜體和下劃線入參只是詢問性質的(用於特性匹配),並不會改變字體的實際效果。

關於SFont的更多詳情

name
一個字串,註冊的字體名稱。
size
一個整數,註冊字體的字號。
bold
一個布爾值,標識註冊字體是否為粗體。
italics
一個布爾值,標識註冊字體是否為斜體。
underline
可以忽略的參數。
filename
一個字串,包含SFont圖形的檔案名。
spacewidth
表示空格字元的寬度的整數,單位是像素。
default_kern
字元間距的預設值,單位是像素。
kerns
兩字型字串中字元間距的值。
charset

字體的字元集。這是一個字串,可以按照字串中包含的字元順序在圖像文件中找到對應的字元。more的SFont字元集如下:

! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
@ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _
` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~

由於BMFont是Ren’Py支持的所有三種圖形文字中完成度最高的,所以我們推薦新建項目使用BMFont。一個BMFont的使用樣例如下:

init python:
    renpy.register_bmfont("bmfont", 22, filename="bmfont.fnt")

define ebf = Character('Eileen', what_font="bmfont", what_size=22)

label demo_bmfont:

    ebf "Finally, Ren'Py supports BMFonts."

字體組 link

創建一個多語言遊戲時,有時無法找到單一的字體能夠包含所有文字並保持創作者想要表現的氛圍。 因此,Ren’Py支持將“字體組”的形式,將兩種或更多字體合併為一種字體。

創建字體組時,需要創建一個 :class:FontGroup 對象並調用逐次調用 .add 方法。FontGroup對象可以直接當作字體使用。 add方法會查看指定範圍內的unicode字元,並採用最先能匹配到的unicode字元範圍對應的字體。

舉例:

style default:
     font FontGroup().add("english.ttf", 0x0020, 0x007f).add("japanese.ttf", 0x0000, 0xffff)
class FontGroup link

可以將一組字體當作一種字體使用。

add(font, start, end, target=None, target_increment=False) link

將某個範圍內的字元與字體 font 關聯。

start
字元範圍起點。可以是一個單字元的字串,也可以是一個unicode字元對應的整數值。如果該入參為None,使用font入參的字體作為預設值。
end
字元範圍終點。可以是一個單字元的字串,也可以是一個unicode字元對應的整數值。如果 start 入參為None,該參數值將忽略。
target
若給定該入參,將根target_increment的值,將指定範圍的字元與指定的字體做關聯。 可以是一個單字元的字串,也可以是一個unicode字元對應的整數值。 如果指定的字元已經在添加了關聯,則忽略此參數。
target_increment
若該值為True,[start, end]範圍內的字元將映射到[target, target+end-start]範圍。 若該值為False,指定範圍內的字元直接與目標字元做關聯。

當多個 .add() 調用中包含同一個字元時,使用第一個包含該字元的add方法中的字體。

這個方法會返回FontGroup對象,所以能多個 .add() 串聯使用。

remap(cha, target) link

將一個或一組字元重映射為某一個目標字元。

cha
需要映射的源字元或源字元集。該值可以是一個單字元的字串,或unicode字元對應的整數值,或前兩者的疊代器對象(iterable)。
target
需要映射的目標字元。該值可以是一個單字元的字串,或unicode字元對應的整數值。

已經(使用add或remap方法)重映射過的字元將被忽略。如果FontGroup對象沒有默認字體,必須指定每一個字元映射或關聯關係。

與add方法一樣,返回FontGroup對象。

文本組件 link

文本也可以用作一個 displayable,這意味著你可以在文本上應用各種變換(transform),可以當作一個圖片顯示並在界面上移動它的位置。

renpy.ParameterizedText(style='default', `properties) link

該函數創建一個可視組件對象,可以帶一個字串做為入參,根據入參字串生成的對象能當作圖像顯示。常用作預定義的 文本 圖片的一部分。

舉例,我們可以這樣寫:

show text "Hello, World" at truecenter
with dissolve
pause 1
hide text
with dissolve

你可以使用ParameterizedText函數,採用不同的樣式特性,直接定義出一些類似的圖片。舉例,我們可以這樣寫:

image top_text = ParameterizedText(xalign=0.5, yalign=0.0)
Text(text, slow=None, scope=None, substitute=None, slow_done=None, **properties) link

創建一個可視組件,在界面上顯示文本。

text
在界面上顯示的文本內容。該參數可以是一個字串,或者一個字串和可視組件的列表。
slow
決定文本是否緩慢顯示,即在界面上逐個顯示出每個字元。若為None,緩慢文本模式取決於slow_cps樣式特性。否則,是否啟用緩慢文本模式由此處參數slow決定。
scope
若不為None,該值應該是一個字典型數值,提供了額外的作用域(scope)供文本內插(interpolation)的使用。
substitute
若該值為True,則應用文本內插(interpolation)。若該值為False,不應用文本內插。若該值為None,由config.new_substitutions控制文本內插表現。

文本功用函數 link

renpy.filter_text_tags(s, allow=None, deny=None) link

返回入參s的一個拷貝,其是文本標籤過濾後的結果。allow和deny關鍵字參數至少需要給出1個。

allow
允許通過的標籤的集。如果某個標籤不在該列表中,將會被移除。
deny
禁止通過的標籤的集。如果某個標籤不在該列表中,將會保留在字串中。
renpy.transform_text(s, function) link

轉換字串s,但保留s的文本標籤和內插文本不變。

function
一個轉換函數,將文本進行轉換並返迴轉換後的文本。
init python:
    def upper(s):
        return s.upper()

$ upper_string = renpy.transform_text("{b}Not Upper{/b}", upper)

慢速文本的顧慮 link

Ren’Py允許創作者或者用於指示某些文本以慢速顯示。這種情況下,Ren’Py會將文本渲染至某個紋理(texture),然後將紋理的矩形區域繪製到界面上。

不幸的是,這意味著字元間的重疊區域渲染後會出現瑕疵。為了儘可能減少這種渲染瑕疵,需要儘可能保證 line_leadingline_spacing 值足夠大,各行之間沒有覆蓋的區域。如果首行縮進文本,特別是line_spacing為負值的情況,我們需要考慮增大 line_overlap_split 的值。

水平方向的瑕疵也可能由於字偶距原因而擠在一起,不過這不是什麼嚴重的問題,畢竟相鄰字元之間顯示的時間差不過1幀而已。

對於靜態文本來說存在瑕疵不是什麼問題,比如菜單等用戶界面部分。

文本溢出日誌 link

Ren’Py可以記錄文本溢出所在區域的日誌。要啟用文本溢出日誌功能的話,需要經過以下步驟:

  1. config.debug_text_overflow 配置項設為true。
  2. 設置 xmaximumymaximum 樣式特性,該樣式特性配置在文本組件上,或者包含文本組件的容器上。
  3. 運行遊戲。

一旦文本顯示溢出了可用區域,Ren’Py就會把錯誤記錄在 text_overflow.txt 文件中。