马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
本帖最后由 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),甚至你可以做出拖动某个字加入到对白中的效果,本质是一个按钮与对话文本联动的接口
|