不相容的變更 link
這裡列出了腳本格式或者創作者開發環境變更後,需要調整的內容。我們旨在所有的變更都不會影響已存在的腳本內容。
只需要注意,設置 config.script_version
就恢復版本變更導致的許多變化,代價是無法使用新增特性。
關於GUI方面的不相容變更,詳見 不相容的GUI變更 部分,只有重新生成GUI才會讓這些變更生效。
待定的棄用內容 link
這裡記載的東西可能是未來Ren’Py版本中可能會發生的。
Ren’Py 8.1發布1年後,即2024年5月,將停止對Python2和Ren’Py 7的支持。
Ren’Py 8.1發布1年後,即2024年5月,將移除原生OpenGL渲染器。
Ren’Py 8.2和7.7起將徹底禁用 config.gl2
這個標識。GL2渲染器將用作默認渲染器,除非用戶選擇另一個渲染器。
2024年5月後停止對Windows 7、8和8.1的支持。這樣可以使用僅能在Windows10及後續Windows上運行的搞版本Python。
8.2.0 / 7.7.0 link
字串化註解以及停止PEP 563的後續特性 從Ren’Py 8.0.2起,Ren’Py8編譯時直接添加 from __future__ import annotations
,
創作者不可能取消這條編譯命令。
這此的修改可能會無法使用Python未來版本實現的變化。
若要保留字串化註解,可以在文件開頭添加一句:
rpy python annotations
文本的變化 Ren’Py使用Harfbuzz文本引擎。Harfbuzz引擎產生的字形可能與原生字體的字形有所差異,還可能會改變文本所占空間大小。 垂直文本的坐標機制也隨著Harfbuzz渲染的更新而發生了變化。
若不需要此變化,腳本內添加如下內容:
style default:
shaper "freetype"
Ren’Py在必要時會自動使用Emoji字體。若要禁用該功能:
style default:
emoji_font None
文本內插的變化 字串裡的文本內插(interpolation)部分被當作Python表達式處理。 這次變化基本上不會對之前的用法有影響,除非對應的表達式以被其他東西占用。例如:
# Previously
e "[player[money]]" #=> player['money']
# But now
e "[player[money]]" #=> player[money]
若不需要此變化,腳本內添加如下內容:
define config.interpolate_exprs = False
為了幫助某些開發人員從舊版遷移到新版,還存在一個fallback模式。此模式會先嘗試新版文本內插,失敗後再回退到舊版文本內插。 若需要啟用fallback模式,添加:
define config.interpolate_exprs = "fallback"
極坐標系的變化 Ren’Py會強制轉換 angle
和 anchorangle
的角度值,轉換後的值會在0到360度之間,包含0度不包含360度。
之前的版本中,超過該範圍的角度值可能導致未定義的表現。
角度變化360度將不再能觸發圓周運動,因為角度變化會被看作是0。
在ATL中對 angle
和 anchorangle
做動效時,
如果沒有指定旋轉方向,則將使用劣弧(shortest arc),儘管這樣旋轉過程中可能會遇到0度。
極坐標系的變化沒有相容性選項,實際上也基本上不會影響視覺效果。
禁止空的ATL語句塊 之前版本的Ren’Py允許空的ATL語句塊。現在遇到空ATL語句塊時,會報錯提示需要一個語句塊。 如果以前的腳本有類似下面的ATL:
show eileen happy:
"..."
要改成:
show eileen happy
"..."
Box Reverse 樣式特性 box_reverse
有兩方面的變化:
可視組件的間隔空間按照界面中可視組件定義的順序挨個添加。 之前的版本中,如果啟用了
box_reverse
,則會以相反順序添加間隔空間,可能會改變某些組件的尺寸。
這些改變的目標是,讓box_reverse適配從右往左書寫的語言文字。若要回退這項改變:
define config.simple_box_reverse = True
build.itch_channels 該變數在文件中寫著是個字典,但實際實現確實一個元組的列表。 現在已經真的改成一個字典了。如果原本的腳本中就把該變數作為列表處理,並且不想再改代碼的話:
# formerly
$ build.itch_channels.append(("pattern", "channel"))
$ build.itch_channels.extend([("pattern", "channel")])
define build.itch_channels += [("pattern", "channel")]
# now
$ build.itch_channels["pattern"] = "channel"
$ build.itch_channels.update({"pattern": "channel"})
define build.itch_channels["pattern"] = "channel"
define build.itch_channels |= {"pattern": "channel"}
新的位置類型 在 position 的類型列表中新增類型 position()
。
renpy.get_placement()
函數的返回結果就可能是這種新類型。
若不要這個變化,在遊戲中添加如下代碼:
define config.mixed_position = False
拖拽組的變化 將一個可視組件添加至某個拖拽組 DragGroup
對象後,
該可視組件將會蓋在組內其他組件上面,而之前的版本是被其他所有組件蓋在下面。
若要回退這項變化,在遊戲中添加如下代碼:
define config.drag_group_add_top = False
translate語句和config.statement_callbacks (包括Ren’Py內部自動生成的)translate語句不再會調用 config.statement_callbacks
。
轉場使用子組件的位置 如果某個轉場的子組件提供了位置資訊,該位置資訊將用於整個轉場。 只有在使用ATL轉場(transition),並且新舊兩個子組件的位置相同時,這樣用才是合理的。
若要禁用該變化,在遊戲中添加如下代碼:
define config.transitions_use_child_placement = False
容器允許變換事件穿透
容器類組件(包括fixed、hbox、vbox、side、grid、viewport和vpgrid)可以允許變換事件(transform events)穿透自身抵達自組件。 也就是說各個子組件可以獨立擁有針對這些事件的變換效果。
若要禁用該變化,在遊戲中添加如下代碼:
define config.containers_pass_transform_events = set()
say界面新增replace事件 say界面可以對“replace”事件(而不是“show”事件)作出響應,暫停指定時間(單位為秒)。
若要禁用該變化,在遊戲中添加如下代碼:
define config.say_replace_event = False
某個界面從隱藏狀態再次顯示不會取消hide事件 之前的版本中,某個界面隱藏後再次顯示時,響應該界面hide和replace事件的變換會被取消, 導致界面會突然出現。現在會讓hide和replace事件的響應變換運行完。
若要禁用該變化,在遊戲中添加如下代碼:
define config.screens_never_cancel_hide = False
8.1.1 / 7.6.1 link
安卓金鑰遷移 我們收到了一些報告,表示一些遊戲由於使用了不同的金鑰而被Google Play商店拒絕包含APK的Bundle上架申請。 該現象是由某個老版本的Ren’Py造成的,該版本可以使用APK金鑰生成Bundle。在控制台中可能會受到如下錯誤資訊:
You uploaded an APK that is not signed with the upload certificate. You must use
the same certificate. The upload certificate has fingerprint:
SHA1: ...
and the certificate used to sign the APK you uploaded has fingerprint:
SHA1: ...
這種報錯可能是由其他問題引發的(比如只是使用了完全錯誤的金鑰)。一種可能的解決方案如下:
遊戲根目錄中的
bundle.keystore
文件重命名為bundle.keystore.bak
。將
android.keystore
複製到遊戲根目錄,並改名為bundle.keystore
。
最後嘗試生成並上傳Bundle。
8.1.0 / 7.6.0 link
互相衝突的特性 使用原生的input界面時,可能會在遊戲中引入一些互相衝突的樣式特性。 修復方法如下:
+define config.check_conflicting_properties = True
screen input(prompt):
style_prefix "input"
window:
vbox:
- xalign gui.dialogue_text_xalign
+ xanchor gui.dialogue_text_xalign
xpos gui.dialogue_xpos
xsize gui.dialogue_width
ypos gui.dialogue_ypos
text prompt style "input_prompt"
input id "input"
氣泡式台詞 在之前的遊戲項目中添加氣泡式台詞的支持前,需要添加一些文件和腳本內容。 詳見 氣泡式台詞 部分。
Live2D 當前版本Ren’Py對Live2D Cubism 4 SDK版本的要求為Native R6_2或之後的版本。 使用舊版本可能會被Ren’Py拒絕。
紋理記憶體 當前版本Ren’Py計算紋理快取時更精確。
總體來說,大概提升了 config.image_cache_size_mb
容量的33%,以及等量的記憶體。
音訊淡出 停止音訊播放或使用 play
語句更改播放內容後,預設有0.016秒的淡出效果,防止爆音問題。
可以通過配置項 config.fadeout_audio
修改淡出時間。如果要禁用默認淡出效果:
define config.fadeout_audio = 0.0
淡出的音量值以對數形式遞減,能讓音訊更順滑,符合人類耳朵的聽覺習慣。 之前則是線性遞減。如果要切換為以前的淡出算法:
define config.linear_fades = True
Translate None Ren’Py在遇到顯式的 translate None
語句用以標註不進行語言轉換的字串、樣式和Python代碼時將報錯。
這種情況很少見。推薦修改下列程式碼:
translate None start_abcd1234:
e "This is a test"
改為:
e "This is a test" id start_abcd1234
也可以直接設置配置項:
define config.check_translate_none = False
按鍵映射 按鍵映射 文件部分大量修改。因此遊戲做修改時使用預設的按鍵映射方案不是個好主意。 不然就要更新或處理原來沒有的按鍵事件。
文件搜尋 當前版本Ren’Py只會在game/images目錄中搜尋圖片文件,而不管其他類型文件。 如果要在game/images目錄中存放其他類型文件,需要設置:
define config.search_prefixes += [ "images/" ]
搜尋文件時選用的路徑主要考慮文件的用途,而不是文件類型和副檔名。
因此,renpy.loadable("dlc.jpg")
不會搜索game/images/dlc.jpg文件。
如果想要尋找該文件,需要寫 renpy.loadable("images/dlc.jpg")
。
如果要同時在game和game/images兩個路徑搜尋文件,需要寫 renpy.loadable("dlc.jpg", "images")
安卓 安卓中需要用到的 android.keystore
和 bundle.keystore
文件需要放在項目根目錄中,而不再是rapt目錄。
這項修改是為了構建不同版本時能使用不同的金鑰(key),或者在不同的安卓版本中使用同一個金鑰。
如果想要使用自己擁有的金鑰,需要編輯 android.json
,把update_keystore設置為False。
然後再編輯 rapt/project
中的 local.properties
和 bundle.properties
,指向自己的金鑰。
安卓配置文件從 .android.json
改名為 android.json
。在舊文件存在的情況下,Ren’Py會自動創建新的文件。
對話歷史 當前正在顯示的對話將進入歷史列表(和history界面)。之前的版本中,只有對話完全顯示後才會進入歷史列表。 正在顯示的對話類型會被標記為“current”。
在少數情況下,遊戲需要使用舊版本的表現形式,可以修改配置項:
define config.history_current_dialogue = False
Steam appid 沒有設置 config.steam_appid
的情況下,Ren’Py會刪除game目錄下所有存在的 steam_appid.txt
文件。
這可以防止使用錯誤的appid。
黏滯圖層 新版本引入了黏滯圖層的概念,可以根據圖像標籤(tag)設置顯示的圖層,而不再是圖像定義的默認圖層。 在少數情況下,遊戲可能要求相同圖像標籤(tag)的內容同時顯示在多個不同的圖層上。這種需求是無法實現的。
若要完全禁用黏滯圖層,可以修改配置項:
define config.sticky_layers = [ ]
此外,還可以在定義圖層時就聲明 sticky=False
:
init python:
renpy.add_layer("ptfe", sticky=False)
方頭凹形括號表示Ruby文本 此版本的Ren’Py引入方頭凹形括號表示Ruby文本的語法。 如果原來的遊戲中有左方頭凹形括號(【),需要改為連續兩個括號轉義“【【”後才能正確顯示。 (嚴格來說,只有一對方頭凹形括號中出現全形豎條“|”符號時才必須轉義,不過統一語法總是更好。)
若要取消這種Ruby文本語法,在腳本中添加:
define config.lenticular_bracket_ruby = False
常量儲存區 此版本的Ren’Py引入了 常量儲存區,並把某些內建的儲存常量化了。 常量儲存在初始化階段後不會再改變。以下為儲存的常量:
_errorhandling _gamepad _renpysteam _warper audio achievement build director iap layeredimage updater
如果遊戲中需要修改儲存的某些變數值,(舉例來說)可以將對應的變數設置:
define audio._constant = False
混音器音量 必須使用新的格式,0.0表示-40dB(電平),1.0表示0dB(電平)。 若要使用舊版格式:
define config.quadratic_volumes = True
同時,還要將 config.default_music_volume
、config.default_sfx_volume
和 config.default_voice_volume
都修改。如果任何一個的值為0.0或1.0,都沒效果。
at transform和全局變數 在at transform語句塊中使用的全局變數不會在變數發生改變時重新計算。 該情況適用於界面中沒有用到的ATL。
The recommended fix is to capture the global variable into a local, by changing 推薦的修復方法是,新增一個本地變數,從全局變數賦值。 原腳本:
screen test():
test "Test":
at transform:
xpos global_xpos
需要修改為:
screen test():
$ local_xpos = global_xpos
test "Test":
at transform:
xpos local_xpos
若要使用原本的設計,需要修改配置項:
define config.at_transform_compare_full_context = True
8.0.2 / 7.5.2 link
模態界面會屏蔽 pause
語句和 renpy.pause`()
效果,直接終止暫停。
原本是這樣的設計,但某些情況下沒效果。
若要恢復舊版:
define config.modal_blocks_pause = False
歷史記錄默認不再使用Ruby/Furigana文本標籤。
若要恢復舊版,需要修改screens.rpy文件中的 gui.history_allow_tags
配置項:
define gui.history_allow_tags = { "alt", "noalt", "rt", "rb", "art" }
僅在遊戲中使用Ruby/Furigana文本標籤時才需要注意。
8.0.0 / 7.5.0 link
構建分發包時,“Windows, Mac, and Linux for Markets”類型的包不會在添加目錄名稱和版本號作為zip文件前綴。 若要恢復舊特性,可以在遊戲腳本中添加:
init python:
build.package("market", "zip", "windows linux mac renpy all", "Windows, Mac, Linux for Markets")
對於歷史記錄中的noalt文本標籤,需要編輯 screens.rpy 文件,確保 gui.history_allow_tags
中包含“noalt”。
其預設值是:
define gui.history_allow_tags = { "alt", "noalt" }
(該變更在7.4版本中就已添加,只是文件沒更新。)
Ren’Py的7.4系列版本中有一些功能反覆變更,比如讀檔後回滾的結果,在 after_load
腳本標籤的變化,
以及 config.after_load_callbacks
配置項。
如果你的遊戲需要讀檔後做數據遷移,推薦調用 renpy.block_rollback()
防止數據變化後的回滾問題。
config.narrator_menu
配置項預設值改為True。最近的幾個版本中,screen.rpy文件設定的預設值就已經是True了。
若需要改為舊版本:
define config.narrator_menu = False
音效和語音的音訊通道將在返回主選單後自動停止播放。 如果需要回到舊版(返回主選單後只有movie通道停止),在遊戲腳本中添加:
define config.main_menu_stop_channels = [ "movie" ]
使用 call screen
調用的界面,默認不再支持前向滾動。
詳見 變更日誌 中關於可能引發問題的內容。
前向滾動可以通過所有界面的 roll_forward 特性啟用:
define config.call_screen_roll_forward = True
用在vbox和hbox中的key和timer語句,不再占據空間。 showif語句中的子組件隱藏式,也同樣不占空間。 若需要恢復舊版:
define config.box_skip = False
拖拽組件的 focus_mask
樣式特性預設值改為None。
這項改動提升了性能表現,副作用是可視組件的透明像素部分也可以被用於拖動了。
若要恢復舊版功能,將單個拖拽組件的focus_mask特性值設置為True,或者修改全局設置:
style drag:
focus_mask True
不過兩種做法都會降低性能。
樣式特性 outline_scaling
的預設值改為“linear”。
窗口縮放係數直接乘以輪廓線大小的值,然後取整。
這可能會導致同心的相近粗細輪廓線可能會混在一起看不清。
若要恢復舊版,將單個文本元素的 outline_scaling 特性設置為“step”,或者修改全局設置:
style default:
outline_scaling "step"
變換特性 crop_relative
的預設值改為True,原來為False。
裁剪是若需要指定像質數,需要使用int型數值或 absolute
數值。
若要恢復舊版的功能,把浮點數轉換為整數:
define config.crop_relative_default = False
不過,需要警惕本頁文件中的其他內容可能會與上一項引發的衝突,有些部分不能與其他新功能特性同時使用。
比如使用 crop
特性對 crop_relative
有用,現在還對 corner1
和 corner2
產生影響。
lib/ 目錄中針對不同平台的子目錄名稱發生變化。
lib/windows-x86_64
目錄改為 lib/py2-windows-x86_64
。
這項改動主要是為了使用Python 3的Ren’py 8版本。
具體的目錄名稱沒有在文件中記錄,並且不同的Ren’Py可能會有不同。
我們可以確定的是 sys.executable
是設置好的。
vpgrid不再能裝載超過單元格數量的元素,將 allow_underfull
特性或 config.allow_underfull_grids
配置項設置為True後,只能裝在小於單元格數量的元素。
層疊式圖像 中放置子組件和調整子組件尺寸的方式發生改變。
不再以層疊式圖像顯示占據的區域,而是以整個界面尺寸,計算子組件的大小和位置,
除非顯式指定 xsize
、ysize
或 xysize
的值。
若要恢復舊版:
define config.layeredimage_offer_screen = False
或者可以指定層疊式圖像的 offer_screen
特性值為False。
ATL中的 function
語句僅在運行超過一次之後才限制其運行。
若要恢復舊版,ATL中始終限制function語句:
define config.atl_function_always_blocks = True
7.4.11 link
當前版本Ren’Py將在焦點發生改變,例如界面顯示或隱藏時,依然運行某個按鈕的unhovered特性。 若要恢復舊版表現:
define config.always_unfocus = False
7.4.9 link
當前版本Ren’Py在遇到浮點型數值的 xsize
和 ysize
時,認為這兩個特性表示可用區域的某個比例。
若要恢復回去:
define config.relative_transform_size = False
啟用自動語音時,圖層、界面和可視組件的閱讀順序發生改變,按與用戶的距離從近到遠依次朗讀。 若要恢復舊的順序:
define config.tts_front_to_back = False
7.4.7 link
xminimum
和 xmaximum
都為浮點型數值時,這兩個最小值會當作可用區域的一個比例值。
這表示 xsize
也需要調整以達到需要的結果。
這項變更可能會導致某些可視組件的尺寸發生變化。
若要恢復回去:
define config.adjust_minimums = False
ATL可視組件會在其自身首次顯示是開始計算動畫時間,而不是其所在界面顯示時開始計時。 若要恢復回去:
define config.atl_start_on_show = False
輸入游標默認閃爍。若要修改:
define config.input_caret_blink = False
7.4.6 link
7.4.5中對圖層清理規則的修改已發生反轉。新的 camera
語句符合新的規則,而 show layer
語句適用舊規則。
7.4.5 link
當前版本的遊戲開發預設使用基於模型的渲染器。若要禁用該渲染器,修改配置項:
define config.gl2 = False
7.4.6版本已反轉
scene
語句不再清理列表中的圖層(layer)。若需要清理圖層,使用:
show layer master
“master”是需要清理的圖層名稱。若要修復舊特性,修改配置項:
define config.scene_clears_layer_at_list = True
7.4.3 link
當前版本允許用戶使用點擊(滑鼠)忽略使用 renpy.transition()
轉場效果,
使其與使用 with
的say語句和 call screen
語句保持一致。
如果要保持原有特性,修改配置項:
define dismiss_blocking_transitions = False
7.4.1 link
當前版本的暫停效果使用 renpy.pause()
而不是 with Pause(...)
。
這意味著用戶需要多次點擊(滑鼠)才能跳過多個暫停。
如果要恢復原來的設置,修改配置項:
define config.pause_with_transition = True
7.4 link
移動平台僅限於軟解解碼,可以使用硬體解碼播放影片。如果要回歸原來的設置:
define config.hw_video = True
當前版本Ren’Py只在圖像標籤(tag)中至少包含一個屬性(attribute)的情況下才會顯示側邊欄頭像(side image)。禁用該設置:
define config.side_image_requires_attributes = False
7.4版本起,將不再支持初始化階段以外的場景修改配置項,比如 config.mouse
。
請考慮使用 default_mouse
配置項設置自訂的滑鼠游標。
7.3.3 link
在配置項 config.start_callbacks
中註冊的回調功能,任何情況下都會在 default
語句之後運行。
如果要恢復原來的行為模式(即回調在 default
語句之前運行):
define config.early_start_store = True
當視口或vpgrid帶有滾動條時,將自動關聯minimum、xminimum和yminimum變長特性到對應邊的滾動條上,而不僅僅是視口自身的特性。
要繞開這個不相容點,要麼使用 viewport_minimum
,viewport_xminimum
和 viewport_yminimum
,要麼修改配置項:
define config.compat_viewport_minimum = True
7.3.0 link
界面語言方面,在遇到類似下面的代碼時會出現錯誤提示“a non-constant keyword argument … is not allowed after a python block.” :
screen test():
default a = 0
button:
$ a = 1
action Return(a)
text "Test"
原因是,action 特性會在Python變數聲明之前運行,所以運行結果會返回0而不是1。 如果要禁用這個錯誤提示功能,請在遊戲的game目錄下名為 01compat.rpy 的文件中添加一行:
define config.keyword_after_python = True
side
布局的所有子對象的繪製順序,現在由控制字串決定。如果要改為原來的固定順序,請使用:
define config.keep_side_render_order = False
config.say_attribute_transition_callback
配置項的介面發生不相容的改變。
改變後允許使用新舊標籤(tag)的集合。
如果要恢復成舊的介面,請使用:
define config.say_attribute_transition_callback_attrs = False
模式參數也有一些改變,當 permanent
和 temporary
屬性轉場都奏效時,將返回 both
。
7.2.2 link
config.say_attribute_transition_callback
配置項已變更,接受一個新的入參,表示顯示的圖像。
7.1.1 link
Ren’Py的window auto功能現在會自動判斷對話或標題是否帶menu語句,並會在合適的時機自動隱藏或顯示對話窗口。 啟用這項特性需要使用“強制重新編譯”。考慮到較老遊戲的相容性問題,這項特性可以通過如下配置關閉:
define config.menu_showed_window = True
define config.window_auto_show = [ "say" ]
define config.window_auto_hide = [ "scene", "call screen" ]
由於這並非嚴格意義上的不相容變更,對於歷史界面(screen)來說,推薦做一點修改。 詳見 變更日誌入口 中如何更新遊戲的部分。
7.1 link
當某個圖像不正處於顯示時,帶屬性(attribute)的say語句會決定一個頭像(side image),而不是使用之前某個給定的屬性。 如果要禁用這項特性,在配置中添加:
define config.say_attributes_use_side_image = False
7.0 link
Ren’Py現在將自動圖像(automatic images)的優先度定義為 init 0,而不是原來那樣一個非常低的init級別。 如果需要恢復到以前的情況,需要在遊戲腳本中這樣寫:
init -1:
define config.late_images_scan = True
現在 Dissolve()
, ImageDissolve()
和 AlphaDissolve()
轉場預設使用原可視組件的alpha通道值,就像指定了 alpha=True
。
如果不使用這個特性,需要在配置中添加:
define config.dissolve_force_alpha = False
已經顯示的某個影片精靈(movie sprite)再次使用show命令時,現在會重播該影片。 如果不使用這個特性,需要在配置中添加:
define config.replay_movie_sprites = False
6.99.13 link
超連結的字體大小繼承鄰近文本。禁用這個特性,需要在配置中添加:
define config.hyperlink_inherit_size = False
文本標籤 {nw} 現在會等待語音和自動語音結束,然後實現文本消失的效果。 如果想禁用這個特性,需要在配置中添加:
define config.nw_voice = False
現在ATL變換(transform)在遇到某個pause語句或者interpolation語句時,會顯示至少一幀。 如果遊戲中不希望出現這種情況,而是顯示為一些快速略過的幀,需要這樣配置:
define config.atl_one_frame = False
現在某個語句內顯示的圖層(layer),將保持變換(transform)的狀態,就跟其他ATL變換一樣。 這個特性會導致一些行為表現的變化,例如,語句中多個圖層顯示的偏移量會保持一致。 如果想禁用這個特性,需要在配置中添加:
define config.keep_show_layer_state = False
如果並非不相容性變更導致, renpy.list_files()
會以標準順序將變更排序。
這會觸發Ren’Py對存在歧義的行為進行定,並產生確定的唯一結果。
例如,images目錄下有多個同名文件,Ren’Py會隨機選取其中之一。(在不同的系統上,選取的文件可能不同。)
現在,Ren’Py運行時總是會選擇同一個文件。
6.99.12.3 link
開發者模式下,Ren’Py不再搜索系統已安裝的字體檔案。 如果遊戲使用系統已安裝的字體,字體檔案應該被複製到game目錄下。(但是請確保這個行為符合字體檔案的使用許可。)
6.99.11 link
style
和``translate`` 語句的執行順序已經改變,詳見文件 the changelog 。
如果不使用這個特性,需要在配置中添加:
define config.new_translate_order = False
注意,不使用這個變更會讓新版本的GUI也無法生效。
配置項 config.quit_action
的預設值已經變更,改為“遊戲中”上下文(context)時退出才會給提示。
如果不使用這個特性,需要在配置中添加:
define config.quit_action = ui.gamemenus("_quit_prompt")
現在Ren’Py增大了按鈕和窗口所允許的最大尺寸。 如果不使用這個特性,需要在配置中添加:
define config.enforce_window_max_size = False
6.99.9 link
現在Ren’Py在名為“audio”的通道上播放介面音效,並且支持同時播放多個音效。
該通道的設置未必與訂製化的音效通道相同。audio通道可以通過調整配置項 config.auto_channels
的值來改變。
或者添加如下代碼使用sound通道。
define config.play_channel = "sound"
6.99.2 link
現在Ren’Py會自動掃描圖片目錄(game目錄下名為images的子目錄)並搜尋圖片文件,並基於圖片檔案名自動定義圖像(image)。 如果不使用這個特性,需要在配置中添加:
init python:
config.image_directory = None
6.18 link
現在 show screen
和 call screen
語句將在界面預處理進程中計算使用的入參。
如果計算結果對某個界面可能會產生副作用, show screen
和 call screen
後面就需要使用新增的 nopredict
分句,這樣就不進行預處理。
界面(screen)現在可以接受轉場(transition)——轉場效果可以讓界面從舊的狀態轉變到新的狀態。
如果不使用這個特性,需要將配置項 config.transition_screens
設置為false。
同名tag的界面互相替換時,Ren’Py不在使用等式賦值方式轉換界面狀態。
現在的方法是, use語句 現在支持 id
特性,這個特性可以用於顯式轉換界面狀態。
6.16 link
如果需要使用原來的特性,需要將 loop 和 single_track 同時設置為true。
6.15.7 link
Ren’Py在 Preference()
函數中加入了“auto-forward”,可用於控制自動前進模式。
如果需要使用自動前進模式滑動條,就將配置將 config.default_afm_enable
設置為None。
6.14 link
以前的版本中,Ren’Py會將歸檔文件放入archived目錄。當運行遊戲或生成歸檔時,Ren’Py會自動搜索該目錄。 現在有了一鍵打包功能,就沒有必要執行這步操作,所有原來在archived目錄裡的文件都應該移到game目錄下。
MoveTransition()
修改了介面。
如果創作者不想使用重寫程式碼,可以使用OldMoveTransition實現舊版本MoveTransition的功能。
(新舊版本的變化,僅跟使用MoveTransition實現的效果有關。)
Transform()
修改了特性,可以實現圖片的非對稱縮放和旋轉。這與舊版的使用方法不同。
6.13.8 link
舊式的字串替換重新預設為啟用狀態。 如果創作者寫的代碼(使用6.13和6.13.7之間的版本),在say語句或menu語句中使用了 % ,可以直接替換為 %% ,或者添加如下代碼:
init python:
config.old_substitutions = False
6.13 link
關於文本特性的許多變化會對遊戲開發產生多種影響。 最大的變化是,引入了新式的(方括號)文本替換,並淘汰了舊式的(使用百分號)文本替換方案。 如果需要恢復舊式特性,需要使用以下配置:
init python:
config.old_substitutions = True
config.new_substitutions = False
將兩項都設置為True後,就可以在同一個遊戲裡混用新式和舊式文本替換。
Ren’Py還修改了預設的線性傳送(line-wrapping)特性。新的特性不會再增加某個段落中的的行數,它可能會修改每行內單字。 如果需要使用舊特性,可以添加如下代碼:
init python:
style.default.layout = "greedy"
style.default.language = "western"
行間距為負數的bug已經修復。這個修復能導致語句塊中顯示文本高度會有一點縮進。 如果需要使用舊版特性,使用如下配置:
init python:
config.broken_line_spacing = True
最後,新的文本代碼可能會在顯示慢速文本時需要手工調整,特別是在負值的行間距情況下。
可以考慮調整 line_overlap_split
的值來修正。
6.12.1 link
圖像的名稱,已經從靜態名改為基於屬性的命名方式。這個特性可能會導致原先唯一的圖像名稱變成同名圖像。
如果需要禁用基礎屬性的圖像命名,將配置項 config.image_attributes
設置為False。
不顯式提供一個變換(transform)或ATL語句塊(block)的情況下顯示某個圖像,將保持那個圖像前一個使用的變換(transform)。
這意味著,某個移動中的圖像將保持移動狀態。如果需要使用舊的特性,可以將配置項 config.keep_running_transform
設置為False。
Character()
的 image 入參含義發生變化。
舊版本的含義在基於界面環境下不能被支援。
出於相容性的考量,將配置項 config.new_character_image_argument
設置為False可以使用恢復舊版的含義。
6.12.0 link
Choice 和 nvl_choice
界面內的 items 參數定義已改變。
nvl_choice
界面不再作為 NVL 的代替。
為了允許預載入圖像,可以在任意時刻喚起界面,除非預載入特性(property)的值是False。 當預載入特性的值不為False時,從最初的顯示開始,界面就不應該導致任何副作用。
由於某些性能原因,Ren’Py現在忽略ImageReference的位置特性(property)。
這意味著style.image_placement類型的位置特性都會被忽略。如果需要恢復舊版本的特性,將配置項 config.imagereference_respects_position
設置為True。
6.11.1 link
MoveTransition()
已修改為適應移動可視組件的xoffset和yoffset參數。
用於移動的功能函數現在使用 xoffset 和 yoffset 作為入參。內建的移動功能函數使用這些參數可以正常運行。
用戶自訂功能函數需要升級,正確使用或者忽略這些新增入參。
6.11.0 link
通過配置項
config.default_transform
指定的變換(transform)用於初始化show和hide語句中圖像的變換特性(property)。該變換的預設值將xpos
和xanchor
設置為0.5,ypos
和yanchor
設置為1.0。這個特性防止風格特性的預設值發生改變。在之前的版本中,風格特性未被初始化的情況下,預設值均為0.
在ATL變換中包含
reset
,所有這些特性都可以被重新設置回0。因此,創作者可以停用默認變化,並恢復到老版本的特性,使用如下配置:init python: style.image_placement.xpos = 0.5 style.image_placement.ypos = 1.0 style.image_placement.xanchor = 0.5 style.image_placement.yanchor = 1.0 config.default_transform = None
如果某個變換沒有定義全部的位置(position)特性,包括
xpos
,ypos
,xanchor
和yanchor
,就會嘗試從該變化的子組件或子特性中獲取對應特性的值,前提是其子組件或子特性中定義了對應特性的值。這個特性允許某個變換控制可視組件的水準運動,而另一個變換控制可視組件的垂直運動。不過這個特性與之前的不相容。 可以修改配置項
config.transform_uses_child_position
禁用新特性。init python: config.transform_uses_child_position = False
6.10.0 link
幾個預設的位置名稱(left,right,center,truecenter,offscreenleft和offscreenright),現在已定義為ATL變換(transform)。這意味著在某個位置顯示圖像後,圖像的位置會被記錄。如果不需要使用這個特性,要重定義所有位置,添加如下代碼:
define left = Position(xalign=0.0)
define center = Position(xalign=0.5)
define truecenter = Position(xalign=0.5, yalign=0.5)
define right = Position(xalign=1.0)
define offscreenleft = Position(xpos=0.0, xanchor=1.0)
define offscreenright = Position(xpos=1.0, xanchor=0.0)
6.9.2 link
如果要將你的遊戲從Ren’Py 6.9.2或更低版本遷移到高版本,將包含遊戲的目錄複製到工程目錄中。創作者可以點擊啟動器中的“設置”、再進入“工程目錄”,即可選中一個需要的工程。詳見 Ren’Py 6.9.2 發布說明 查看更低版本的遷移方法。