不兼容的变更 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会强制转换 angleanchorangle 的角度值,转换后的值会在0到360度之间,包含0度不包含360度。 之前的版本中,超过该范围的角度值可能导致未定义的表现。 角度变化360度将不再能触发圆周运动,因为角度变化会被看作是0。

在ATL中对 angleanchorangle 做动效时, 如果没有指定旋转方向,则将使用劣弧(shortest arc),尽管这样旋转过程中可能会遇到0度。

极坐标系的变化没有兼容性选项,实际上也基本不会影响视觉效果。

禁止空的ATL语句块 之前版本的Ren’Py允许空的ATL语句块。现在遇到空ATL语句块时,会报错提示需要一个语句块。 如果以前的脚本有类似下面的ATL:

show eileen happy:
"..."

要改成:

show eileen happy
"..."

Box Reverse 样式特性 box_reverse 有两方面的变化:

  • 可视组件的间隔空间按照界面中可视组件定义的顺序挨个添加。 之前的版本中,如果启用了 box_reverse,则会以相反顺序添加间隔空间,可能会改变某些组件的尺寸。

  • 设置了 box_wrap hbox组件会从上往下wrap。设置了 box_wrap 的vbox组件会从左往右wrap。

这些改变的目标是,让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: ...

这种报错可能是由其他问题引发的(比如只是使用了完全错误的密钥)。一种可能的解决方案如下:

  1. 游戏根目录中的 bundle.keystore 文件重命名为 bundle.keystore.bak

  2. 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.keystorebundle.keystore 文件需要放在项目根目录中,而不再是rapt目录。 这项修改是为了构建不同版本时能使用不同的密钥(key),或者在不同的安卓版本中使用同一个密钥。

如果想要使用自己拥有的密钥,需要编辑 android.json,把update_keystore设置为False。 然后再编辑 rapt/project 中的 local.propertiesbundle.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_volumeconfig.default_sfx_volumeconfig.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 有用,现在还对 corner1corner2 产生影响。

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后,只能装在小于单元格数量的元素。

层叠式图像 中放置子组件和调整子组件尺寸的方式发生改变。 不再以层叠式图像显示占据的区域,而是以整个界面尺寸,计算子组件的大小和位置, 除非显式指定 xsizeysizexysize 的值。 若要恢复旧版:

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在遇到浮点型数值的 xsizeysize 时,认为这两个特性表示可用区域的某个比例。 若要恢复回去:

define config.relative_transform_size = False

启用自动语音时,图层、界面和可视组件的阅读顺序发生改变,按与用户的距离从近到远依次朗读。 若要恢复旧的顺序:

define config.tts_front_to_back = False

7.4.7 link

xminimumxmaximum 都为浮点型数值时,这两个最小值会当作可用区域的一个比例值。 这表示 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_minimumviewport_xminimumviewport_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

模式参数也有一些改变,当 permanenttemporary 属性转场都起效时,将返回 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 screencall screen 语句将在界面预处理进程中计算使用的入参。 如果计算结果对某个界面可能会产生副作用, show screencall screen 后面就需要使用新增的 nopredict 分句,这样就不进行预处理。

界面(screen)现在可以接受转场(transition)——转场效果可以让界面从旧的状态转变到新的状态。 如果不使用这个特性,需要将配置项 config.transition_screens 设置为false。

同名tag的界面互相替换时,Ren’Py不在使用等式赋值方式转换界面状态。 现在的方法是, use语句 现在支持 id 特性,这个特性可以用于显式转换界面状态。

6.16 link

如果需要使用原来的特性,需要将 loopsingle_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

Choicenvl_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参数。 用于移动的功能函数现在使用 xoffsetyoffset 作为入参。内建的移动功能函数使用这些参数可以正常运行。 用户自定义功能函数需要升级,正确使用或者忽略这些新增入参。

6.11.0 link

  • 通过配置项 config.default_transform 指定的变换(transform)用于初始化show和hide语句中图像的变换特性(property)。该变换的默认值将 xposxanchor 设置为0.5, yposyanchor 设置为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)特性,包括 xposyposxanchoryanchor ,就会尝试从该变化的子组件或子特性中获取对应特性的值,前提是其子组件或子特性中定义了对应特性的值。

    这个特性允许某个变换控制可视组件的水平运动,而另一个变换控制可视组件的垂直运动。不过这个特性与之前的不兼容。 可以修改配置项 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 发布说明 查看更低版本的迁移方法。