變更日誌 (Ren’Py 6.11 - 6.99) link

6.99.14.3 link

變更 link

可視組件 AlphaMask() 將其遮罩(mask)放入其子可視組件,與AlphaDissolve的處理方式相同。 這樣改動後,允許mask參數透過使用ATL或其他變換(transform)創建。

幾個過時的圖像操縱器已被棄用,並從文件中刪除。這些是已被 Transform() 完全取代的圖像操縱器。

重命名了一些函數,刪除了“Live”前綴。

原有的函數名已保留作為相容的別名。

修復 link

這個版本修復了一個問題:界面內for語句的子組件不應該在界面更新循環中增加自身的數據。 這個問題出現在比較複雜的場景中,比如循環的轉場(transition)或慢速文本(slow text)無效的時候。

該版本可以使用選擇的顏色顯示最新的存檔槽位,如果有需要使用的話。 這個功能直接會應用在新創建的遊戲中。舊工程可以在gui.rpy底部添加如下代碼實現更新:

define gui.slot_button_text_selected_idle_color = gui.selected_color
define gui.slot_button_text_selected_hover_color = gui.hover_color

6.99.14.2引入的,在回滾之後default語句無法工作的故障,也已經修復。 這個故障僅對首次存檔後的遊戲有影響。

6.99.14.2 link

特性和變更 link

Ren’Py現在支持Atom文本編輯器。選擇了Atom文本編輯器後,Ren’Py會下載Atom,安裝language-renpy、renpy-dark-syntax和renpy-light-syntax的Atom插件,並創建一個新的profile文件。 使用這些新的默認設置能讓Ren’Py變成更輕鬆。

現在還支持在對基於圖片的字體使用下劃線。

當某個界面使用預設的GUI滾動設置時,PageUp和PageDown按鍵能直接滾動界面。(這個功能僅在新創建的工程上生效。)

可視組件 Movie() 現在使用play_callback入參。這個入參指定了一個函數,調用這個函數就能播放一段影片。 這個函數能處理的東西包括,在通常循環播放的影片前面加一個轉場影片,讓轉場更平滑。

新的 renpy.get_say_image_tag() 函數可以重新獲取(retrieve)發言角色的名字。

ATL的interpolation語句現在可以在多行的變換(transform)中同時執行,並且都不消耗時間。

向call語句添加一條from語句不再修改多語言支持(translation)的標識符。(這個標識符也用於自動語音的編號。) 由於這是一個重大改變,Ren’Py在遇到舊式的多語言支持標識符時會進行重新計算並使用。

僅當可以定位到單個可視組件時,才調用_choose_attributes方法。這個方法支持AttributeImage beta(https://github.com/renpy/ai)。

新的 gui.button_image_extension 配置項允許按鈕(button)圖片使用.webps文件。

自動語音 link

Ren’Py的自動語音模式,針對視覺障礙用戶的功能又進行了提升:

  • 選擇按鈕之後會在後面加上單詞“selected”。
  • 選擇條(bar)之後會在後面加上單詞“bar”。
  • 一些擁有自身自動語音訊息的行為在新版GUI中提升了效果。
  • Ren’Py內建的ALT文本實現多語言支持(translation)。

由於改變了自動語音的輸出,這個變更應該不會對已存在的支持語言生效。

修復 link

在無存檔遊戲中存檔或自動存檔導致的髒數據問題,已經被修復。

Python的hide語句現在可以運行在python函數上下文(context)中。 某個結構(像生成器表達式)編輯hide語句,並能正確運行。

全局腳本標籤(global label)的表現與文件描述一致。

自訂滑鼠歸位導致的滑鼠指針亂跳問題已經修復。

顯示菜單後依然顯示頭像的問題已經修復。

某個界面被替換後,Ren’Py不再存儲原界面內不顯示的可視組件的狀態。 (如果第一個界面再次顯示,那些可視組件會獲取舊的狀態,這可能會導致出現問題。)

show和replay事件消息現在總是會傳送到界面內的變換(transform)。界面顯示時總是需要廣播那兩類事件消息。之前的快取可以阻止某些show事件的廣播。

可以按住alt鍵輸入字元了。(在某些歐洲語言中有些特殊字元必須要按住alt鍵才能輸入。)

當安卓包生成系統重命名文件或目錄失敗時,會在60秒內重試,才會放棄。這段時間主要用於處理Windows平台賽門鐵克防毒軟體的問題。

6.99.14.1 link

圖像預載入和快取 link

將一個圖像轉換為紋理(texture)時,現在Ren’Py會搜索不透明像素的包圍盒(bounding box)。 當 config.optimize_texture_bounds 配置變數為True(也就是預設值)時,只有不透明像素會存儲到圖像快取中。 這樣可以明顯降低某些圖像的記憶體消耗,比如大部分都透明的圖層上的圖像。

現在 config.cache_surfaces 配置項預設值是False。這使得圖像快取對記憶體大小的要求減半,但讓使用同一圖像的多個圖像操縱器(manipulator)運行速度下降。

現在 config.image_cache_size_mb 配置項控制圖像快取的大小,預設值為300MB。新的默認設置裡,圖像內的每個像素非透明邊框占用4byte記憶體。

以上三點的改變是圖像占用的快取更小,也意味著Ren’Py可以存儲更多預載入圖像。

Ren’Py在快取圖片和界面時,現在拒絕調用那些從磁碟讀取文件的函數(比如 renpy.image_size())。那些函數的響應慢,而會引發掉幀。

ConditionSwitch()ShowingSwitch() 可視組件有了一個新的“predict_all”參數。當這個參數為True時,預載入所有可視組件,而不僅僅是選中的那個。這個改動可以用於Ren’Py預載入某個精靈(sprite)的所有表情。

renpy.start_predict()renpy.stop_predict() 函數現在是可以使用正則表達式通配符。例如:

$ renpy.start_predict("eileen *")

預載入所有開頭為標籤(tag)“eileen”的圖像,出現如下語句:

$ renpy.start_predict("* beach*")

匹配所有帶有“beach”屬性的圖像。

現在F4鍵可以顯示圖像載入日誌了。

其他改進 link

變換(transform)現在有了一個新的 maxsize 特性,能夠將圖像縮小到某個範圍的方框裡。

當Ren’Py重新載入(reload)時,會保留Python表達式快取,相比原來每次重新載入都unmarshall快取有明顯的性能提升。

track.txt和errors.txt文件現在底部會有一個日期,更容易判斷這個文件是否過期失效。

新的 renpy.list_images() 函數返回所有定義過的圖像列表。

Drag組件現在新增了 mouse_drop 特性。若這項特性為True,使用滑鼠指針坐標選擇Drag組件落下的位置,而不是使用overlap最大的Drag組件。

西班牙語版本更新。

其他修復 link

修復ATL“on hide”分句無效的bug。

等待某個界面跳動(flip)時釋放GIL(解釋器全局鎖),讓一些任務(播放音樂、預載入圖像、自動存檔等)在後台執行緒運行得更快。

(譯者註:請不要糾結GIL是什麼。相信我,沒錯的……)

Ren’Py 6.99.14 link

性能表現 link

為了提升性能,我們做了很多細碎的工作,包括在絕對性能和明顯的幀率突刺方面。

當設備接通電源時,Ren’Py會嘗試使用固定幀率繪製界面。當設備使用電池時,切換到5fps的幀率前將繪製幾幀,確保顯示快取區完成界面的更新。

Ren’Py有一些選項控制顯示性能,使用shift+G能進入選項菜單。除了上面提到的GL性能變更之外,這個設計允許用戶鎖定幀率並接受畫面撕裂。 使用運行比較慢設備的用戶可能會選擇鎖定30fps而不是變動的幀率。如果開發者覺得大多數用戶都會使用性能慢的設備,可以使用默認語句:

default preferences.gl_framerate = 30

當某一幀渲染時間過長(比如,由於一個未預載入的圖像需要從硬碟讀取),Ren’Py會嘗試根據設置的幀率展現轉場(transition)和可視組件。 這也表示Ren’Py不得不跳幀,並且會從序列中的第一幀之前開始跳幀,而不是從第一幀和第二幀之間開始跳幀。

如果創建了足夠數量的對象,Ren’Py自身會在繪製一幀後觸發GC。觸發GC的對象數量的值提高了。 觸發的數量閾值應該已經足夠高,只要遊戲中沒有創建環狀的對象引用,就不需要主動要求GC。 (環狀的對象引用是指,幾個對象互相引用對方,形成一個循環。)我們修改了Ren’Py,可以排除常見的環狀對象引用代碼。

Ren’Py的GC管理能減少或消除GC對大多數遊戲的丟幀影響。不過,也可以把 config.manage_gc 設置為False,恢復為之前的調優方法(tune)。

默認情況下,“hide”事件句柄會觸發Ren’Py移除臨時界面(比如say和choice界面)和可視組件。檢查這類句柄的過程系統消耗很大,還好這類句柄很少使用。 將 config.zap_transients 設置為False可以把這個配置恢復為之前版本的狀態。

現在Ren’Py第一次遇到Python表達式後會編譯並快取起來,而不是原來那樣每次遇到Python表達式都重新編譯。 這個改動提升了多次復用的根據條件選擇顯示的可視組件的運行速度。因為這個改動,所有在Ren’Py 6.99.14版本運行的遊戲第一次打開時都會變慢,因為所有表達式都需要編譯。

這個版本提高了回滾時保留必要訊息的速度,以及減少了保留必要訊息的次數。用戶能體會到的是,現在Ren’Py能回滾到前面更深的地方。

此外當然還有很多性能方面的提升,實際效果都是提升了運行速度。這個版本還只是性能提升的第一戰,新的性能分析框架允許Ren’Py開發者進一步提升性能。

多角色對話 link

現在Ren’Py包含一個新系統,允許多個角色在同一時間發言。通過在say語句結尾添加multiple入參可以實現這點。舉例:

e "Ren'Py now supports multiple character dialogue." (multiple=2)
l "About time! I've been wanting this for years!" (multiple=2)

由於顯示多個角色的對話可以有好幾種方式(並排?上下排列?一個還是兩個文本框?),Ren’Py尚不能提供現成的支持方案。 請參考 多角色對話 章節的內容,查看哪些樣式需要創作者定義。

GUI環境設定 link

Ren’Py提供了一套新的GUI環境設定系統,替換了原來的樣式環境設定系統。新的系統允許從多個樣式中引用變數並應用在新的GUI環境設定中。

可以這樣寫腳本:

define gui.text_font = gui.preference("font", "DejaVuSans.ttf")

載入環境設定,並使用下列腳本:

vbox:
    style_prefix "radio"
    label _("Font")
    textbutton _("DejaVu") action gui.SetPreference("font", "DejaVuSans.ttf")
    textbutton _("Dyslexic") action gui.SetPreference("font", "OpenDyslexic-Regular.otf")

設置環境設定。詳見 GUI環境設定

Tooltips link

Ren’Py中增加了一個新的tooltip系統,替換了原來存在tooltip。在之前的系統中,我們需要這樣寫:

default tt = Tooltip("No button selected.")

textbutton "One.":
    action Return(1)
    hovered tt.Action("The loneliest number.")

text tt.value

現在可以這樣寫:

textbutton "One.":
    action Return(1)
    tooltip "The loneliest number."

text GetTooltip()

這個系統意在節省代碼和讓界面具有更高的可讀性。 詳見 Tooltips 章節。

變更 link

全平台支持SSL和TLS。現在允許Ren’Py遊戲使用某個Python庫的連接,向有安全要求的Web伺服器發送請求。支持這點必須在初始化階段導入(import)對應的Python庫。

新的圖像操縱器(manipulator) im.Data() 能根據壓縮過的二進位制數據創建一個圖像(iamge)。原壓縮二進位制數據可能是從某個Web伺服器下載的。

配置項 config.loadable_callback 允許腳本向Ren’Py提供需要額外載入文件的訊息。

遇到存檔時pickle對象發生的故障,Ren’Py會嘗試進行診斷,並報告引發pickle故障的對象。(性能表現不錯,不過只能捕獲一些常見故障。)

如果某個視口(viewport)包含滾動條(scrollbar),Ren’Py會向其子組件在指定方向上提供一個非常大的空間。這個改動防止在視口(viewport)的可視區域之外繪製可視組件可能導致的故障。

Ren’Py現在解決了樣式特性 xposxalign 之間的歧義,總是偏向於使用xpos。類似的,同一個樣式有多個指定樣式特性都奏效的情況也都解決了。

現在帶有腳本標籤(label)函數的自訂語句可以返回對應語句的一個自訂腳本標籤(label)。這個改動語句自訂語句也可以被jump或者call。

在螢幕使用letterbox和pillarbox顯示模式時,新的 config.gl_clear_color 配置項允許創作者設置填充色。

(譯者註:letterbox和pillarbox是指原生畫面比例與顯示設備畫面比例不同時,兩種處理方法。letterbox指的是16:9的原生畫面顯示在在4:3的螢幕上,原生畫面與螢幕同寬,上下添加黑邊;pillarbox正好相反,為4:3的原生畫面顯示在16:9的設備螢幕上,左右添加黑邊。)

(拖放系統中的)drag組件現在支持bottom方法,可以將drag組件沉到drag group的最底層。

最新發布版中新增的 config.cache_surfaces 配置項已經添加對應的文件說明。將這項配置為False可以降低Ren’Py的記憶體消耗,代價是多個圖像操縱器(manipulator)處理同一圖像的速度下降。(這個情況在現版本的Ren’Py中已經很少見。)

變數和欄位(filed)的munge功能(會將開頭為“__”的部分改為文件指定的值),現在可以在字串替換(substitution)中運行了。

視口(viewport)和vpgrid現在支持pagekeys特性,允許用戶使用PageUp和PageDown按鍵滾動視口。arrowkey特性也包含在文件中。

RAPT現在使用原始碼和目標版本1.6來編譯Java代碼,這使得它可以構建在最新的JDK上。

修復 link

編譯次數不同導致的界面顯示不正確問題已經修復。這個問題僅在同時滿足下列條件時出現:

  • 工程中裡的多個文件都定義了界面(screen)。
  • 文件在不同時間編譯。(release版遊戲不會存在這個問題,因為所有文件都會在生成分發版時同時編譯。)

升級到這個發布版的Ren’Py後,可以在啟動器中選擇“強制重新編譯”修復這個問題。這個功能可以解決開發中的遊戲的問題。Release版遊戲沒有必要這麼做。

互動式指導器(interactive director)也做了一些提升,可以在更多場景下使用。

在安卓和iOS設備上的資源競爭可能導致Ren’Py鎖定(顯示空白螢幕)的問題已經修復。這個問題是在6.99.13版本中引入的。

在6.99.13版中,資源競爭會讓Ren’Py以小機率完全跳過一段影片的播放。

Ren’Py現在支持AltGr按鍵。

(譯者註:AltGr是某些非美式鍵盤的按鍵,等效於Ctrl+Alt組合鍵。)

Ren’Py現在限制了控制台輸出日誌大小,防止控制台不顯示的情況下列印語句消耗過多記憶體。

Ren’Py 6.99.13 link

Ren’Py 6.99.13 及更老版本的更新日誌,請參考英文原網頁:https://www.renpy.org/doc/html/changelog6.html#ren-py-6-99-13