找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 192|回复: 7

[求助] 求助!如何实现头像和立绘解绑?(可以自由控制头像出现与否)

[复制链接]
发表于 2026-1-13 10:01:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本帖最后由 巳不像 于 2026-1-13 12:40 编辑

如题!


我通过现有的教程贴已经可以用side来实现立绘和头像绑定了,也就是有立绘的时候自动出现头像

但是现在想要实现立绘不出现的时候也能显示头像是否出现(不是玩家控制,而是我在写代码的时候控制,比如目前背景CG是人物A,那人物A说话时不显示头像,而画面外的人物B说话时显示头像)

以及立绘出现的时候怎么不显示头像呢?T T

纯萌新,现在非常迷茫

恳请大佬指点一下(鞠躬)

发表于 2026-1-17 12:27:13 | 显示全部楼层
本帖最后由 被诅咒的章鱼 于 2026-1-17 12:31 编辑

首先说明,为什么要问“screen say”的部分。Ren'Py生成的默认项目模板中的定义如下:

[RenPy] 纯文本查看 复制代码
screen say(who, what):

    style_prefix "say"

    window:
        id "window"

        if who is not None:

            window:
                id "namebox"
                style "namebox"
                text who id "who"

        text what id "what"


    ## 如果有对话框头像,会将其显示在文本之上。请不要在手机界面下显示这个,因为
    ## 没有空间。
    if not renpy.variant("small"):
        add SideImage() xalign 0.0 yalign 1.0

头像(Side Image)是显示在 say 界面中的。此处不修改的话,只要使用 say 语句就一定会显示头像。根据当前 say 语句中的入参 who 返回不同的Image对象,可能会返回一个Null(),即一个空图像。

接着,使用“side”关键词定义头像使用的Image对象的方法,楼主大概已经掌握,此处省略。

然后,不显示立绘但显示头像的问题,楼主也已了解,此处省略。

最后,只显示立绘不显示头像的问题,需要新增全局控制变量并修改 screen say :
[RenPy] 纯文本查看 复制代码
default enable_side_image = True

screen say(who, what):

    style_prefix "say"

    window:
        id "window"

        if who is not None:

            window:
                id "namebox"
                style "namebox"
                text who id "who"

        text what id "what"

    # if not renpy.variant("small"):
    if enable_side_image:
        add SideImage() xalign 0.0 yalign 1.0

修改后,需要启用或禁用头像的 say 语句之前修改 enable_side_image 的值就可以了。

回复 支持 1 抱歉 0

使用道具 举报

发表于 2026-1-14 17:26:18 | 显示全部楼层
如果楼主不想自己的代码被完全弃用的话,需要先把自己实现的代码发出来……
回复 支持 抱歉

使用道具 举报

 楼主| 发表于 2026-1-15 19:43:11 | 显示全部楼层
本帖最后由 巳不像 于 2026-1-15 19:44 编辑
被诅咒的章鱼 发表于 2026-1-14 17:26
如果楼主不想自己的代码被完全弃用的话,需要先把自己实现的代码发出来…… ...

好的!这个是我写的一部分定义角色立绘和头像的代码,我现在已经知道怎么在不显示立绘的时候显示头像了,但还是不会在显示立绘的时候自由控制头像出现与否
【我不会带图T T】

定义角色⬇️
define s = Character('四野', image='sy', callback=active, cb_name='sy',ctc="ctc",ctc_position="nestled")
define h = Character('和然', image='hr', callback=active, cb_name='hr',ctc="ctc",ctc_position="nestled")

定义立绘⬇️
image sy putong:
    ConditionSwitch(
    "current_speaker == 'sy'", "images/character/sy putong.png",
    "current_speaker != 'sy'", im.MatrixColor("images/character/sy putong_1.png", im.matrix.saturation(0.4) * im.matrix.brightness(-0.2)))
    zoom 0.8
    xanchor 0.59
    yanchor 0.66
    xpos 1080
    ypos 1920
image hr lin:
ConditionSwitch(
    "current_speaker == 'hr'", "images/character/hr lin.png",
    "current_speaker != 'hr'", im.MatrixColor("images/character/hr lin_1.png", im.matrix.saturation(0.4) * im.matrix.brightness(-0.2)))
    zoom 0.8
    xanchor 0.59
    yanchor 0.66
    xpos 1080
    ypos 1920

定义头像⬇️
image side hr lin :
    "images/head/head hr lin.png"
    zoom 0.55
image side sy putong:
    "images/head/head sy putong.png"
    zoom 0.55

其他立绘和头像都是用的一样的方法定义的

需要调用立绘的时候直接用 show
不展示立绘只展示头像的时候就写【s putong "xxx"】


回复 支持 抱歉

使用道具 举报

发表于 2026-1-16 15:29:09 | 显示全部楼层
screen say的定义、current_speaker 的定义、active的定义,都发出来。这些都是相关的内容。
回复 支持 抱歉

使用道具 举报

 楼主| 发表于 2026-1-16 22:24:29 | 显示全部楼层
被诅咒的章鱼 发表于 2026-1-16 15:29
screen say的定义、current_speaker 的定义、active的定义,都发出来。这些都是相关的内容。 ...

[RenPy] 纯文本查看 复制代码
default flag_choose_A = False
default flag_choose_B = False
default flag_choose_C = False

#定义全局变换
init python:
    def active(event, name, interact=True, **kwargs):
        global current_speaker
        if not interact:
            return

        if event == "begin":
            current_speaker = name

default current_speaker = None

#定义角色
define s = Character('四野', image='sy', callback=active, cb_name='sy',ctc="ctc",ctc_position="nestled")
define h = Character('和然', image='hr', callback=active, cb_name='hr',ctc="ctc",ctc_position="nestled")

#定义角色立绘高亮、状态 
image sy putong:
    ConditionSwitch(
    "current_speaker == 'sy'", "images/character/sy putong.png",
    "current_speaker != 'sy'", im.MatrixColor("images/character/sy putong_1.png", im.matrix.saturation(0.4) * im.matrix.brightness(-0.2)))
    zoom 0.8
    xanchor 0.59
    yanchor 0.66
    xpos 1080
    ypos 1920
image hr lin:
    ConditionSwitch(
    "current_speaker == 'hr'", "images/character/hr lin.png",
    "current_speaker != 'hr'", im.MatrixColor("images/character/hr lin_1.png", im.matrix.saturation(0.4) * im.matrix.brightness(-0.2)))
    zoom 0.8
    xanchor 0.59
    yanchor 0.66
    xpos 1080
    ypos 1920

#定义头像
image side hr lin :
    "images/head/head hr lin.png"
    zoom 0.55
image side sy putong:
    "images/head/head sy putong.png"
    zoom 0.55

#位置
transform leftsy:
    xpos 450
    alpha 0.0
    linear 0.5 alpha 1
transform rightsy:
    xpos 1650
    alpha 0.0
    linear 0.5 alpha 1
transform righthr:
    xpos 1600
    alpha 0.0
    linear 0.5 alpha 1
transform lefthr:
    xpos 550
    alpha 0.0
    linear 0.5 alpha 1

# 人物cg
image black = "#000"
image white = "#ffffff"
image bg feiqi1:
    "images/background/bg feiqi1.png"
    zoom 0.5
image bg sy1:
    "images/background/bg sy1.png"
    zoom 0.5
image bg hr1:
    "images/background/bg hr1.png"
    zoom 0.5

#背景cg
image bg feiqi2:
    "images/background/bg feiqi2.png"
    zoom 0.5
image bg feiqi3:
    "images/background/bg feiqi3.png"
    zoom 0.5
image bg feiqizoulang:
    "images/background/bg feiqizoulang.png"
    zoom 0.5

#屏幕文本
image credits_text = ParameterizedText (ycenter=0.5,xcenter=0.5,color="#ff0000",size=50,slow_cps=10)   

#ctc
image ctc:
    "images/ui/ctc.png"
    zoom 0.5
回复 支持 抱歉

使用道具 举报

 楼主| 发表于 2026-1-16 22:27:13 | 显示全部楼层

这些基本上就是我定义的全部内容了,screen say我没改过,应该就是初始的那些数值吧
回复 支持 抱歉

使用道具 举报

 楼主| 发表于 2026-1-17 20:51:32 | 显示全部楼层
被诅咒的章鱼 发表于 2026-1-17 12:27
首先说明,为什么要问“screen say”的部分。Ren'Py生成的默认项目模板中的定义如下:

完全明白了!大佬讲得很清楚!谢谢!
回复 支持 抱歉

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|RenPy中文空间 ( 苏ICP备17067825号|苏公网安备 32092302000068号 )

GMT+8, 2026-3-2 04:58 , Processed in 0.051397 second(s), 29 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表