【杂文】renpy漫游记

发布时间 2023-03-28 23:06:40作者: 辰星凌

【杂文】renpy漫游记

程序工作基本告一段落了。后续如果有新的折磨再补充(希望不要再有了TAT)。

1.【隐藏对话框】

在剧本文件中可以直接用指令 window hide 隐藏。

如果要做“隐藏”按钮,需要 action 。由于 00keymap.rpy 文件中内置有 label _hide_windows,直接写 action Call("_hide_windows") 即可。

2.【在设置页面创建一个bar调整对话框透明度】

搞了一整个晚上,遇到诸如“条的 value 不能是实数”,“变量修改后如果换个界面莫名其妙回到默认”,“对话框所属 window 组件的特性”等等一大堆问题,因为尝试了各种各样的方法,所以还有别的许多……让人掉头发的东西……

最后在社区找到了这个:Changing the opacity of the Dialogue box with a Slider

这篇帖子里又出现这个:how do I change the opacity of the dialogue box in Ren’Py

最终终于是解决了问题。

首先,在 screen saywindow 组件里添加对话框背景图片时用这句话:

window:
    id "window"

    background Transform(Image("gui/ui_dialogue/ui_dialogue_box.png",xalign=0.5, yalign=1.0), alpha=persistent.windowalpha) #加这句
        
    if who is not None:
        window:
            id "namebox"
            style "namebox"
            text who id "who"

注意一下,这句大有来头。

首先是必须放在这个位置(即 window 组件内的最上面。免得将后面的文字和名字框覆盖),这个很显然。

其二:必须在这里写 Transform() 函数,如果在 screen 外面用 transform xxx: 语句定义一个变换的话,那么就是定死了无法再改变。

其三:Transform() 函数里那个 persistent.windowalpha 变量定义在 screen say 外面,要求这样子写:

define persistent.windowalpha=0.5 #0.5是设置的初始值,改成1.0也可

实测用 default my.windowalpha 会寄……奶奶滴……还是老老实实用 definepersistent 吧(虽然我并不清楚原理)

然后,后面 bar 这样写(注意 style="xxx" 不能省):

bar value FieldValue(persistent,"windowalpha",range=1.0,style="slider") 

我的 style 长这样:

screen preferences(title="textpage",pre_title="none"):
    ...
    vbox:
        ypos 410
        style_prefix "mysliderh"
        yalign 0.0
        spacing 52
        bar value Preference("text speed")#文本显示速度
        bar value ...#文本显示速度...
        bar value FieldValue(persistent,"windowalpha",range=1.0,style="slider")#对话框透明度

style mysliderh_slider:
    xpos 969
    xsize 676
    thumb_offset 34#这个很重要
    left_gutter 34#这个也很重要
    right_gutter 34#这个也很重要
    base_bar "gui/ui_setting/ui_setting_slider_h.png"
    thumb "gui/ui_setting/ui_setting_thumb_h.png"

3.【主界面BGM/粒子效果】

因为一些我不懂的奇怪问题,直接在 screen main_menu(): 里播放BGM的话,会放两次(如果在这里加粒子效果,也会有两次),而且进入设置页面后再回来会重播……所以还是去 00start.rpy 里修改吧。引擎内置有 BGM 播放的代码,照着抄一份粒子的就可以了。