Skip to content

dialogbox_sprite_CN

windows99-hue edited this page Jul 14, 2026 · 2 revisions

dialogbox的立绘功能

v2.3.0之后的版本中,dokiboxdialogbox带有了渲染立绘功能!

3f95a52f629bc382f2d1dc18cfcf4d9d

演示视频

立绘功能的API如下

声明角色

sayori = dokibox.Avatar(name="Sayori", emotes={
    "normal":["images\\sayori\\1l.png",
              "images\\sayori\\1r.png",
              "images\\sayori\\a.png"]
})

dokibox.Avatar类会初始化一个角色立绘,详情可见仓库内avatar_test.py

参数 类型 默认 说明
name str "" dialogbox的nametag所显示的内容
emotes dict "" emotes参数接收一个字典,其中字典键为表情名称,字典值应为一个列表,你可以在其中放置任意数量的立绘图片,他们可以是字符串类型的图片路径,也可以是bytes字节串,dokibox会将传入的所有照片一同合并为一个整体,并参与到接下来的渲染中

渲染立绘

一个普通的带立绘dialogbox调用办法如下

dokibox.dialogbox("哇,这里的风景也太舒服啦!",name=sayori,sprites=[sayori("center", "happy")])
参数 类型 默认 说明
name str或dokibox.Avatar "" 若传入类型为dokibox.Avatar,则dialogbox会将这个对象视为说话者,并放大10%
sprites 列表 None 该列表可传入任意数量(不推荐超过6个)的dokibox.Avatar对象,请直接将变量作为魔术函数调用

关于dokibox.Avatar的魔术调用

完全的魔术调用如下,以前文创建的sayori角色为例

sayori(position="center", emote="happy", animation="shocked", width=200, height=300, sprite_allow_cover=True)
参数 类型 默认值 解释
position str 必须是left center right中的一个,代表了立绘存在的位置,多个立绘可以在同一个位置,程序会自行调整
emote str 请传入先前定义角色时emotes字典中的键名,代表立绘在这个dialogbox下的表情
animation str 详见下文的关于动作参数
width int 立绘的宽,当width和height只有一个设置时等比例缩放
height int 立绘的高,当width和height只有一个设置时等比例缩放
sprite_allow_cover bool False 若为True,则这个dialogbox的该立绘无视平均平滑排布算法,直接覆盖在指定位置

关于动作参数

名称 动作
thanks 立绘向下移动后向上恢复位置,就像鞠躬一样
sad 立绘向下移动后不再回弹,直到下一次调用dialogbox
shocked 立绘快速向上弹跳起来

多个立绘示例

dokibox.dialogbox("原来是这样!难怪到处都是郁郁葱葱的,也太漂亮啦~",name=sayori,sprites=[sayori("left", "happy"),yuri("right", "smiled")])
c132a913e95bacec0c50898a6b06a875
dokibox.dialogbox("是啊,这么治愈的地方,值得大家一同前来。看来我们默契十足呢~",name=monika, sprites=[sayori("center", "happy"),monika("center", "happy2"),yuri("center", "shocked"),natsuki("center", "mild")])
3b5d931976ecf83a23869e02cd51b40f
dokibox.dialogbox("看来大家都不约而同找到了这个好去处呢。哈喽,各位。",name=monika,sprites=[sayori("left", "shocked"),monika("center", "normal", sprite_allow_cover=True),yuri("right", "shocked"),natsuki("center", "shocked")])
114fe540dc7259e95b1ac144294dfa74

关于连续调用

如果表情和位置都没有变化时,可以不传入sprites参数或者传入None这意味着直接使用上一个dialogbox的配置

dokibox.dialogbox("原来是这样!难怪到处都是郁郁葱葱的,也太漂亮啦~",name=sayori,sprites=[sayori("left", "happy"),yuri("right", "smiled")])
dokibox.dialogbox("这么舒服的地方,如果能配上甜甜的曲奇就更完美啦~诶嘿嘿~",name=sayori)

效果等同于

dokibox.dialogbox("原来是这样!难怪到处都是郁郁葱葱的,也太漂亮啦~",name=sayori,sprites=[sayori("left", "happy"),yuri("right", "smiled")])
dokibox.dialogbox("这么舒服的地方,如果能配上甜甜的曲奇就更完美啦~诶嘿嘿~",name=sayori,sprites=[sayori("left", "happy"),yuri("right", "smiled")])

关于立绘离场

请按照如下方式让想要立场立绘离场

dokibox.dialogbox("大家惊讶地看着我,我也惊讶地看着他们", name="MC", sprites=[monika.hide(),sayori.hide(),yuri.hide(),natsuki.hide()]) #全离场

在伴随其他Qt窗口使用时的注意事项

在目标剧情结束后,建议把最后一个dialogbox的fdst参数设置为True,有效销毁窗口,我觉得这应该算个bug但可以通过fdst参数解决,所以搁置解决计划

Clone this wiki locally