找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 72|回复: 2

[经验] 她的心里话!隐藏文本!

[复制链接]
发表于 前天 22:46 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 leech 于 2025-7-8 22:52 编辑

一如既往叠甲
首先,我的编程基础为0.1(嗯,也玩了不少时间了),以下为纯摸索经验,如果有不对的地方望轻喷
基于个人需求写的东西
拉都拉了,就把这盘九转大肠捧出来给大家品鉴一下

事情的起因是这样的,我一直很喜欢在各种软件,广告,小程序里剽窃有意思的功能
最近玩了一下AI聊天软件,其中有一个“窥探心事”功能
大概就是,正常玩,就是和ai聊天,“窥探心事”则会触发AI深度思考并且给你“表面”之下的心里话
这个功能非常的有意思,所以我决定实现一下

思路是在对话框上面加一个按钮,点击这个按钮则会对当前对话进行变更

比如:

我好 爱 你啊” 变成 “我好 恨 你啊”(直接变更文本)
我好爱你啊” 加一行变成 “我好爱你啊\n我磨好刀了桀桀桀桀桀”(在原有文本下增加一行文字)
注意,为什么这个功能有意思呢?
因为他是不影响你剧本的,只要你不点这个按钮,你就看不到,而且

它是在原对白上进行变更!不是分支!是确确实实的隐藏文本!

这个功能用到renpy一个十分冷门的东西
RestartStatement()文档链接:界面行为(action)、值(value)和函数 — Ren'Py 中文文档

这个行为,背后的逻辑实际涉及到“文本是否被阅读过的功能”。
文本如果已经被阅读过,那么对应的is_seen就会变成True,statement则是记录了文本信息
因此,即便你变更了某项数值,他也不会显现在当前的对白上

实现:有原生的方法,所以代码实际非常非常的短
[RenPy] 纯文本查看 复制代码
#首先定义持久化变量,必须要是持久化的
default persistent.test = 0.0

#创建界面和按钮
screen abc():
    #按钮执行赋值persistent.test为0.5,也就是从透明变成半透明,然后执行RestartStatement(),回滚到当前语句
    textbutton "test" action SetVariable("persistent.test",0.5),RestartStatement()

label start:
    show bg
    #显示这个窗口
    show screen abc
    #为你要隐藏的内容打上texttag,并且插值,现在,只要你点击这个按钮,隐藏内容就会出现
    "龙叔不爱KFC\n{alpha=[persistent.test]}才怪{/alpha}"
    #如果你要重复使用这个值,那么重置它,因为它是持久化的
    $ persistent.test = 0.0
    return

好的,现在我们有了一条被隐藏的对白,接下来我们进行拓展,给他加上动画
这里我使用的是Function(),将我们的刚才的screen abc迁移到原生的screen say
[RenPy] 纯文本查看 复制代码
#这里是把按钮移到了screen say里,我们想要动画,需要让这个持久化的变量持续变动
init python:

    #定义增值函数
    def change_alpha():
        persistent.test += 0.05
        renpy.run(RestartStatement())
    # 将关键回滚行为封装进增值函数,因为动画实际上是由多次回滚组成的

    #定义自动函数
    def auto_increase():
        if persistent.test >= 0.5:
            return
        change_alpha()
        return
    #将自增函数拆分成两部分,是因为我们需要一个启动器,和一个过程器
            

screen say(who, what):
    style_prefix "say"

    textbutton "test" action Function(change_alpha)#在按钮处调用启动器
    window:
        id "window"

        if who is not None:

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

        text what id "what"
    
    if persistent.test > 0.04 and persistent.test < 0.5:#当条件满足时,自动执行过程器
        timer 0.05 action Function(auto_increase) repeat True
        
    #最初的想法是仅用自增函数完成,但是由于这是*多个*交互行为,
    #而RestartStatement()这个行为本身会结束交互,因此使用了timer来进行自动化


拓展,这里只是使用了function(),实际上也可以做成text_tag,也可以对任何接受插值的文本标签操作
(例如kinetic_text_tags),甚至你可以做出拖动某个字加入到对白中的效果,本质是一个按钮与对话文本联动的接口







发表于 昨天 09:16 | 显示全部楼层
赞美大佬
回复

使用道具 举报

发表于 昨天 19:59 | 显示全部楼层
好适合白切黑病娇哦
回复 支持 抱歉

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-10 11:29 , Processed in 0.068065 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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