文本 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)。如果要在文本中包含左花括號,需要寫兩個左花括號 —— {{

【 (左方頭凹形括號)

左方頭凹形括號用於引入Ruby/片假名文本。若要在文本中直接顯示左方頭凹形括號,需要寫兩個連續的方頭凹形括號 【【

內插數值 link

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

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

Ren’Py會按以下順序搜索變數:

  • 在某個界面中時,搜索界面本地變數。

  • 搜索 interpolate 命名空間的變數。

  • 搜索全局變數。

Ren’Py並不限制只允許內插簡單變數值,也支持合法的Python表達式。以下寫法也是可以的:

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

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

g "我百分之 [100.0 * points / max_points:.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 可以將首字母大寫,後面所有文本強制小寫。

有幾個點需要注意:

  • 標記的使用順序不會影響最終結果: !cl!lc 是一樣的。

  • 各標記前補充驚嘆號將被忽略,並且依然遵循上一條規則: !l!c!c!l!cl 的結果都是一樣的。

具體變換遵照以下順序進行:

  1. r/s (替換字串)

  2. t (多語言)

  3. i (循環插值)

  4. q (引用)

  5. u (將字母大寫)

  6. l (將字母小寫)

  7. c (首字母大寫)

樣式化和文本標籤(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文本

rt link

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

s link

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

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

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

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

還可以在字號後面加一個星號 * 和一個浮點數,表示字號乘以一個係數並向下取整。

"{size=*2}兩倍大{/size} {size=*0.5}一半大{/size}"
space link

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

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

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

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

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

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

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

"New{#playlist}"

對話文本標籤 link

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

w link

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

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

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

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

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

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

如果標籤內出現參數,該參數是一個數字,表示等待對應的時間後再執行文本消失,單位為秒。

g "I'm gonna fall in a few seconds!{nw=2}"
show g_gone

“不等待”標籤依然會等待自動語音播放完再讓文本消失。

fast link

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

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

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

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

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

只有在 NVL獨白模式 下,使用clear文本標籤才是合理的。 其作用與 nvl clear 語句相同,但不限於用在某段文本結尾。

"""
第一頁第一段。

第一頁第二段。

{clear}

第二頁第一段。

其他。
"""

也可以使用Python定義出 訂製文本標籤

樣式文本標籤 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_leadingruby_line_leading 特性必須為Ruby文本預留足夠的高度。

  2. 創建一個新的自訂名的樣式(style)。該樣式的特性,比如 size 需要適合Ruby文本。

  3. 新樣式的 yoffset 必須額外設置,這是為了將Ruby文本升到一般文本基線之上。

  4. 無論是在對話還是歷史記錄中,文本樣式的 ruby_style 欄位都應該被設置為上面新創建的樣式。

舉例:

style ruby_style is default:
    size 12
    yoffset -20

style say_dialogue:
    ruby_line_leading 12
    ruby_style style.ruby_style

style history_text:
    ruby_line_leading 12
    ruby_style style.ruby_style

(使用 style.style_name 格式指定需要的樣式)

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

完成Ren’Py的相關配置後,我們有兩種方式在腳本中包含Ruby文本。

方頭凹型括號。 Ruby文本可以寫在一對方頭凹型括號(【】)中。全形或半形的豎線符號(|或|)用來分隔Ruby文本的上半與下半內容。

舉例:

e "Ruby 可以用來標識假名(【東|とう】 【京|きょう】)。"

e "也可以用來翻譯 (【東京|Tokyo】)."

只有在檢測到豎線符號時,才會檢測Ruby文本。連續兩個左方頭凹形括號表示轉義。 方頭凹形括號中不能包含其他文本標籤(tag)。

{rt} 和 {rb} 文本標籤。 {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的第二種字體,以此類推。

如果Ren’Py在根目錄沒有找到某個字體檔案,會在 game/fonts 再次搜索。 例如,使用一個名為test.ttf的文件時,Ren’Py會先搜索 game/test.ttf,然後搜索 game/fonts/test.ttf

字體替換 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

配置項 config.font_name_map 用於建立字體與別名間的對應關係。 字體別名有兩個用於:首先,對話中使用的 {font} 文本標籤(tag)可以更簡短; 其次,可以在文本標籤中使用 字體組

define config.font_name_map["jap"] = "electroharmonix.ttf"
define config.font_name_map["tjap"] = FontGroup().add("OrthodoxHerbertarian.ttf", "A", "Z").add("electroharmonix.ttf", None, None)

label yamato:
    e "Sorry, what does {font=jap}Black holes and revelations{/font} mean ?"
    y "You pronounce it {font=tjap}Black Holes And Revelations{/font}." # 只用OrthodoxHerbertarian字體的大寫字母

(譯者註:electroharmonix是從日文中選取了一些假名和符號替換 英文字母 的一套字體。OrthodoxHerbertarian也是一套英文字體。這兩種字體都不支持漢字,所以文本內容就不翻譯了。)

基於圖形的字體 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對象。

注意,FontGroup類可以使用 config.font_name_map 獲取字體,但FontGroup對象只會獲取字體路徑, 並不會識別配置項中的字體名或別名。

文本組件 link

文本也可以用作一個 可視組件,這意味著你可以在文本上應用各種變換(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)

label start:
    show top_text "這段文字顯示在界面正中"
Text(text, slow=None, scope=None, substitute=None, slow_done=None, *, tokenized=False, **properties) link

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

text

在界面上顯示的文本內容。該參數可以是一個字串,或者一個字串和可視組件的列表。

slow

決定文本是否緩慢顯示,即在界面上逐個顯示出每個字元。若為None,緩慢文本模式取決於slow_cps樣式特性。否則,是否啟用緩慢文本模式由此處參數slow決定。

scope

若不為None,該值應該是一個字典型數值,提供了額外的作用域(scope)供文本內插(interpolation)的使用。

substitute

若該值為True,則應用文本內插(interpolation)。若該值為False,不應用文本內插。若該值為None,由 config.new_substitutions 控制文本內插表現。

slow_done

若非None,並且啟用了慢速文本模式(參見 slow 參數),該參數應該是一個無參數的函數或可調用對象。 當文本完成顯示後調用參數對應的函數或可調用對象。

tokenized

若為True,text 參數需要是一個token列表而不是一個字串。token內容參見 訂製文本標籤 頁面。

**properties

與其他可視組件類似,文本組件可以使用樣式特性,包括 mipmap

文本功能函數 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 文件中。

可變字體 link

Ren’Py支持OpenType可變字體。這些字體可能會支持多個axe,比如字重和寬度。 基於這些axe的不同值,同一個字體可以顯示出不同的形態。可變字體也可能會對不同axe值的實例直接採用不同名稱。 例如,“bold”為名的實力會提供某個字體的粗體版,而“regular”則是某個字體的普通版。

可變字體要求設置 shaper 樣式特性為harfbuzz文本渲染器。 設置完成後,instance 特性選擇實例名,axis 特性設置各axe的值。

可變字體也可以用在GUI中。例如:

define gui.text_font = "nunito.ttf"
define gui.text_instance = "light"
define gui.text_axis = {"width" : 125}

可以使用“light”型字體,並設置文字寬度。

若不指定實例名,Ren’Py預設使用“regular”顯示非加粗文本,使用“bold”顯示加粗文本。

有兩種文本標籤可以用於可變字體。

instance link

instance標籤更改當前使用的字體實例。例如:

"This is {instance=heavy}heavy{/instance} text."

instance標籤會覆蓋axis特性。

axis link

axis標籤會修改一個或多個axe的值。例如:

"This is {axis:width=125}wide{/axis} text."

axis標籤可以多層嵌套組合使用。

“This is {axis:width=125}{axis:weight=200}wide and bold{/axis}{/axis} text.”

標籤內參數賦值時,等號右邊的數會被當作浮點型數值處理。

若要獲取某個字體的實例和axe資訊,可以調用 renpy.variable_font_info() 函數。 該函數設計為從控制台調用。使用時,先用Shift+O打開控制台,然後輸入:

renpy.variable_font_info("nunito.ttf")

就能在控制台看到nunito.ttf字體資訊了。

renpy.variable_font_info(font) link

返回某個可變字體的資訊。若字體不是可變字體則返回None。

font

字體檔案名。

返回對象具有下列欄位:

instance

該欄位是一個字典。字典的鍵(key)分別是該字體的所有實例名。(例如,“light”、“regular”、“bold”或“heavy”。) 字典的各個值可以忽略。

axis

該欄位是一個字典,表示字體中各axe與下列欄位的映射關係:

minimum

axis的最小值。

default

axis的預設值。

maximum

axis的最大值。

該函數返回對象和對象中的數據不能修改。

只有Ren’Py的顯示部分完成初始化之後才能調用該函數。 該函數被設計成透過控制台調用,並以人類能閱讀的形式列印返回結果。