前言

renpy加入對話很簡單,不過想要加入文本就不是那麼容易了。有的時候想要在遊戲中閱讀長文本,還需要插入\n來作為換行,頗不方便。這個時候讀檔功能就派上用場了。
在這裡要注意,不能使用python原生的開檔函式,否則程式有一定可能出錯(詳情看最後一段)。

Renpy讀檔函式

官方讀檔文件在這裡。
不過在讀unicode檔案的時候,還需要做一些特別處理才行,否則讀出來的檔案都是亂碼。以下為範例程式碼,為python語法。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
def read_file(filepath):
    import codecs

    # 開檔
    f = renpy.file(filepath)
    # 讀入檔案
    data = f.read()
    # 轉換為unicode
    data = codecs.decode(data, 'utf-8')
    return data

如此一來,最後產生的data就會是unicode格式囉。

另外,原本想使用官網上所提供的renpy.fsdecode(s)來做編碼轉換,但是失敗了,可能是沒搞懂用法。後來就使用python原生的codec來做轉換。運作得還算不錯。

Renpy路徑問題

renpy的path一律是以game資料夾作為根目錄,往下一層目錄是使用’/‘作為識別。所以不用自作聰明使用python原生地os.path.join函式來合成路徑。在windows合成出來的路徑反而會出錯,因為windows是用反斜線’\‘來分割目錄的。
以下為組合路徑的方法。

1
2
# 假設路徑為game目錄底下的info資料夾裡面的info01.txt檔案
filepath = 'info/info01.txt'

最後碎碎念

其實也並不是不能使用原生地python函式來做開檔,但是要記得一件事,如果你有在renpy的設定中封裝檔案,像下列程式碼。

1
2
# 在options.rpy中
build.classify('game/info/*.txt', 'data')

那麼在製作釋出版時,這些資料會很自然地被封裝到data.rpa的檔案中。如此一來。python原生函式所取得的路徑,自然就會抓不到任何東西。
反過來說,只要你不封裝任何檔案,那你想使用任何python的函式都沒問題(ex: os.path.join / open / …)