RenPy中文空间

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 326|回复: 0

[转载] 第五回:所以說語言是人類文明的瑰寶

[复制链接]
发表于 2019-2-14 15:03:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 BuErShen 于 2019-2-14 17:42 编辑


第五回:所以說語言是人類文明的瑰寶

感謝大家在凜凜寒冬中也不忘準時收看本節目。各位好,這裡是主持人雪凡。

Head_Text_1_7.jpg 「大家好,我是泰克斯 (text)。」

Head_Info_1_3.jpg 「啊,在下是音符。」

Head_Secure_1_1.jpg 「我是絲蔻兒。」

Head_Text_1_4.jpg Head_Info_1_3.jpg Head_Secure_1_1.jpg 「各位好,我們是概念少女們!」

Head_Text_1_4.jpg 「......說是這麼說,不過請允許我再次重申,我只是被拉來湊數的,性別什麼的應該很明顯才對。」

Head_Secure_1_5.jpg 「確實看得出來,手術辛苦了呢,小泰。」

Head_Text_1_1.jpg 「......儘管有點想問妳在鬼扯些什麼,不過想想果然還是沒有介意的必要吧。」

Head_Secure_1_2.jpg 「切!稍微變頑強了一點呢。」

Head_Info_1_8.jpg 「小泰、絲蔻兒,請別這樣......」

呃……看來今天的氣氛會很火熱呢。到底是哪個傻瓜請那兩個同時來上節目的啊?社長!社長在哪裡?

Head_Secure_1_5.jpg 「何必介意這種小事呢,這只是我們展現愛的方式而已啊。」

確實能感覺到,一股歪曲過度的愛......

Head_Text_1_5.jpg 「我會努力不製造您困擾的。請快點開始吧。」

是、是嗎?說的也是。

回到正題吧。

本回要加以介紹的,是文字的特效與格式化。

在由 Ren'Py 驅動的遊戲世界中,創作者可在文字中插入許多特別的「標籤」,來控制文字顯示時的效果。這些效果包括字型改變,顯示速度或滑鼠點擊的細部控制,還有諸如插入連結、插入行內圖片的功能。就算要插入變數,並將變數加以格式化,那也沒有問題。

--在角色吼叫的時候,將字體驟然放大,那不是很棒嗎?

就讓我們研究看看這一切要如何進行吧。

在文字中插入變數

我們從比較抽象一點的地方開始,來聊聊變數吧。

當我們希望遊戲中的文字能隨變數動態變化時,我們可以用 if 語句。這在第三回時做過示範。

但說到底,if 語句本身,只適用在「數量有限的分歧」上面。當變數可能產生的結果太多--比方說,允許玩家自由輸入角色名字--時,企圖用 if 讓文字產生足夠多的分歧,可說是一件完全不可能的任務。

這種時候,我們不應該用 if。取而代之,我們應該要在文字中間,直接插入變數本身!

Head_Text_1_1.jpg 「想插入變數的話,請用方括號 ([])。以下由我示範,各位請看。」
[RenPy] 纯文本查看 复制代码
    # 文字輸入示範
    text "雖然有些無趣,但基本的手續還是要辦一下的。"
    text "請告訴我你的名字,我得做個記錄才行。"

    # 使用以下所示的 renpy.input() 語句,可讓玩家自由輸入文字
    # 第一個參數是提示字,第二個參數是預設值

    $ name = renpy.input("您的名字是……", "路人丙")
    
    text "是[name]啊,很高興認識你。"

另一種常見的使用方法,用來減少打字與剪貼量:
[RenPy] 纯文本查看 复制代码
menu:
    "難得這個時間有空,去哪裡打發好呢?"
    "艦橋":
        position = "艦橋"
    "戰情室":
        position = "CIC"
    "輪機室":
        position = "輪機室"
"啊,去[position]一趟好了。"

還可以用來顯示某些內部狀態......
[RenPy] 纯文本查看 复制代码
"現在的好感度是:[luka_relation]!"

只要巧妙使用,插入變數顯然能成為一項有力的法寶。

跳脫

或許各位會有疑問,以中括號作為標記,在字串中插入變數固然變得非常方便。不過如此一來,當想要在文字中顯示普通的方括號時,又要怎麼做呢?

比方說,以下想要顯示一個方括號......
[RenPy] 纯文本查看 复制代码
    "聽我提起這個問題,愛爾想了想,將那本厚到無以復加的聖典取出。說真格的,這還是我第一次見到這本聖典發揮它原本該有的功能。"
    el "我看看哦......啊,這裡是這樣寫的......[紅之章、第二節]:紅色的神明將在六輪奇月的照耀下降至地面,大地燃起審判的火焰。"

Head_Secure_1_5.jpg 「這小劇場也寫太長了吧?」

不要吐嘈!只是不知不覺就......嗯!回到正題。

如果您直接打出以上台詞,那遊戲會立刻掛掉,因為遊戲引擎會在讀取上述第二句時,去找一個名叫「紅之章、第二節」的變數,但,當然找不到。而且我們也不是希望她輸出變數,而是希望它按照字面輸出,找到也沒用。

我們需要的是「跳脫」。

跳脫是程式設計中的一種常見概念,簡單說來,就是讓有特殊功能的字符(比如說 " 被用作為字串的邊界--所以您不可能直接在字串中打入這個字),消除他的特殊功能,恢復字面上的意思,才能正確地以「字面意義」在字串裡使用。

這種概念在很多程式語言中都有,不過作法各有不同。

此處讓方括號進行跳脫,需要用 [[ 取代 [,如下:
[RenPy] 纯文本查看 复制代码
    el "我看看哦......啊,這裡是這樣寫的......[[紅之章、第二節]:紅色的神明將在六輪奇月的照耀下降至地面,大地燃起審判的火焰。"

如此一來,實際顯示時,[[ 就會被替換為 [ 正常顯示出來,也不會再去試圖讀取變數了。

插入變數的格式化

前述的中括弧內部,不光只能是個簡單的變數名,還可以包含 Python Format Specification Mini-Language 中的格式化描述符號。這能幫助各位輕鬆調節變數(通常是數字變數)的顯示方式,讓「同一個變數可以用不同的字串格式」顯示。

有點複雜?

說得更具體一點,可以讓一個數字在顯示時,改變顯示的位數究竟有幾位,或是前面補零、留空白等......諸如此類。

【變數格式化的限制】
Head_Info_1_10.jpg 音符:「那個......這邊提及的『變數格式化』,僅僅只影響『純文字字串』本身。至於替文字加上黑體斜體這類,「字串」本身沒有改變,只是讓「字體」變化的,那就不算在此處提及的變數格式化之處理範圍裡面。字體改變是文字標籤的任務,後面會提到。」

變數格式化的寫法,是在變數後方接上半形冒號,再於冒號後方接上「格式描述」。比方說下面這個例子......
[RenPy] 纯文本查看 复制代码
$ pi = 3.1415926535
"圓周率為:[pi:.2]"

中括號中的 pi 是變數,至於半形冒號後面的 ".2",那就是「格式描述」了!

以上例來說,".2" 這個格式描述,代表 pi 將顯示到小數點後兩位,一言以蔽之,[pi:.2] 將會被代換為 "3.14"......嗯,是大家很熟悉的數字呢。

變數格式化能用的格式,請參考這裡這裡這兩份 Python 文件。不過以上兩份文件都很難讀,就連主持人我都讀得很頭疼,加上 Ren'Py 與 Python 之間還有些小小差異需要您自行轉譯(見 Ren'Py 官網這裡 【新注:中文文档参考这里:https://www.renpy.cn/doc/text.html#text-interpolation】)。故還是幫大家整理一下,列在下面。

請看以下範例:
[RenPy] 纯文本查看 复制代码
    # 計算 CG 達成度

    $ cg_total = 127
    $ cg_get = 31
    $ cg_complete = float(cg_get)/cg_total # 完成度

    # 上面那行的 float() 函數,是用來將整數轉換成「可允許小數點存在」的「浮點數」用的。
    # 因為程式本身設計,「整數除整數只能產生整數」,所以必須先把其中一項轉為浮點數,才能得出正確結果。
    # 我知道這種設計很反人類啦,但各位看倌和我抱怨也沒用......

# 未格式化的顯示結果: 0.244094488189

    "CG 完成度為:[cg_complete]唷!"
    # 一堆小數點,這絕對不是您想要的......


# 「小數點加數字」:顯示小數點後指定的位數

    "CG 完成度為:[cg_complete:.2]唷!" # 顯示: 0.24


# 「雙百分比符號」:顯示百分數

    "CG 完成度為:[cg_complete:%%]唷!" # 顯示: 24%
    "CG 完成度為:[cg_complete:.2%%]唷!" # 這裡和小數點合併使用,顯示: 24.41%

# ============================

    # 武器攻擊力、武器防禦力
    $ weapon_def = -15
    $ weapon_att = 40

# 「+ 或"空白"」:控制正負號顯示

    "白銀之杖:被聖光祝福過的強大牧師手杖,對抗妖魔效果一流,不過神光也會吸引怪物攻擊"
    "攻擊力[weapon_att]點!防禦力[weapon_def]點!"     # 兩數字分別顯示為:「40」、「-15」。如同此處示範,預設格式化的方式,是遇到負數才顯示負號。

    "攻擊力[weapon_att:+]點!防禦力[weapon_def:+]點!" # 兩數字分別顯示為:「+40」、「-15」,正負號都會顯示。

    "攻擊力[weapon_att: ]點!防禦力[weapon_def: ]點!" # 兩數字分別顯示為:「 40」、「-15」,正號不顯示但會留下空白空間。

# ============================

    # 可用金錢
    $ budget = 231500000

# 「,」:在大數中間加逗點
    "銀庫裡目前還有[budget]元。請指示......" # 顯示「231500000」
    "銀庫裡目前還有[budget:,]元。請指示......" # 顯示「231,500,000」

雖然還有更多格式字串可以用,包括將數字顯示成科學計數法(如 1.322*e+13)、自動補空白對齊(但受限於字型實際上對不齊,除非您使用等寬字)等等,但......在遊戲設計中大都派不上用場。因此介紹就先到此為止。

另外說明一下,前面介紹的格式字串大都可以混合使用,不過混合時有順序限制,這方面還請各位自行試試。或參考前述連結內的說明啦。

標籤
除了插入變數時所用的中括號以外,您還可在文字中插入兩兩成對的大括號「{}」,作為文字的格式標籤。透過由大括號構成的標籤,Ren'Py 遊戲引擎能為您輸入的文字,實現各種不同的格式與特效。

許多標籤都會兩兩成對,合作框住要處理的文字,給文字作註解。就像是下面這樣:
[RenPy] 纯文本查看 复制代码
"文字{標籤名}標籤效果作用的文字範圍{/標籤名}文字"

如果您有寫過 html 網頁原始碼的經驗,就會發現這和網頁標籤幾乎一模一樣!只是把角括號 () 給換成大括號 ({}) 而已--前面的大括號中放著完整的標籤名稱;至於後面的大括號......請注意標籤名稱前方,有一道正斜線 (/)。

除了將文字包裹起來的標籤以外,有些標籤是沒有尾部的,而是單獨一個就能產生效果,如暫停用的 {w} 標籤。另外還有些標籤可能要附加設定參數,如能提供連結功能的 {a} 標籤......

--不用著急,以下都會加以說明,這邊先留個印象就好。

標籤大括號的跳脫方式與變數類似,只要您用「{{」來表示左大括號那就沒問題了。

標籤速查
可用的標籤很多,細節見這裡:http://www.renpy.org/doc/html/text.html#styling-and-text-tags新注:中文文档参考这里:https://www.renpy.cn/doc/text.html#tag】。以下替大家做個快速導覽。

基本字體調整用這些標籤將文字包裹起來,就能實現效果。

  • b:黑體
  • i:斜體
  • s:劃掉
  • u:下畫線

舉例來說......
[RenPy] 纯文本查看 复制代码
    "普通文字{b}這是黑體{/b}{i}這是斜體{/i}{s}這是劃掉{/s}{u}這是底線{/u}\n{b}{i}既黑又斜{/i}{/b}的混合效果也沒問題"

【字串中的 \n】
上面的範例中,字串中間出現了一個長相奇怪的 \n 符號。
這邊補充說明一下:在字串中間,\n 是換行的意思。


Head_Text_1_7.jpg 泰克斯:「在第二回的節目中,有多少提過對吧?-- Ren'Py 腳本中的故事,是以『邏輯行』為單位執行的。因此就算想要在字串中表達『換行』,你當然也不能真的按下鍵盤上的 return 按鈕--那會打破邏輯行!......而為了將『換行』納為『行』的一部份,\n 就被各種程式語言,廣泛地用來代表換行時的 return 按鈕......這樣說能理解嗎?」

Head_Info_1_1.jpg 音符:「小知識:\n 中的 n 其實是 "newline" 的意思唷。」

上例會顯示成下面這樣:

01.jpg
▲ 圖1:使用標籤後的顯示效果......請注意兩種不同的標籤是可以嵌合在一起的。

效果一目了然,沒什麼解釋的必要。我們繼續。

特殊字體調整

以下標籤同樣與字體呈現方式有關,也需要透過前後兩個標籤標明影響範圍才能使用;但除此之外,這些還有些別的參數需要指定。

  • color:輸入 #f00 之類的色碼,控制文字顏色
  • size:指定字體大小。可以用 =+10 來增大減小,也可以設為絕對值
  • font:字型,輸入為檔名。
  • k:字元間距。可以加大每個字之間的距離。

舉例來說......
[RenPy] 纯文本查看 复制代码
    "普通文字{color=#f00}顯示紅色{/color}{color=#0f0}顯示綠色{/color}\n{size=30}這是30號字{/size}預設大小{size=-5}減5{size=+10}再加10{/size}{/size}\n文字預設{k=0}是沒有間距的{/k},{k=5}但可以增加間距{/k}"

會顯示成下面這樣:

02.jpg
▲ 圖2:特殊標籤設置後的效果。不含 font 示範。
以上沒有示範 font 效果......這是因為授權問題比較難搞。有興趣的話還請各位自行試試吧。

插入額外內容
有些標籤不僅能變更現有文字的格式,還會在字串中插入一些特別的內容。如下......

【a】替文字加上連結。

此處所說的連結,可以是超連結(點擊後會打開網頁瀏覽器),也可以是 Ren'Py 內部跳轉用 label,點擊就會跳轉到由指定 label 標誌好的橋段。忘記 label 是什麼的同學,快回去複習第三回!

範例:
[RenPy] 纯文本查看 复制代码
label start:
    "歡迎參觀我們的{a=http://wfst.bolgspot.com}官網{/a},或是進行{a=help}導引段落{/a}"
    return
    
label help:
    "這裡是幫助"

03.jpg
▲ 圖3:連結效果。點擊「導引段落」會自動跳往 help 段落去。

【image】

您可以用 image 標籤,在文字中插入各式各樣的圖片,比方說流汗、愛心符號、驚慌等等的小圖示。

當然囉,在運用這項功能之前,您必須先將圖片準備好,比方說下面這張圖片。

04.png 新注:原图白色透明,论坛无法显示,加了灰色背景,可在此下载 04.zip (787 Bytes, 下载次数: 6)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|RenPy中文空间 ( 苏ICP备17067825号 | 苏公网安备 32092302000068号 )

GMT+8, 2019-8-25 22:02 , Processed in 0.174991 second(s), 23 queries , File On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表