马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
目前人物对话高亮/变暗的主流方法是使用ConditionSwitch,缺点是需要给每个图像都写一遍,下午在玩植物大战僵尸的时候想出了一个比较方便的方法[RenPy] 纯文本查看 复制代码
# 这里是需要应用的自动高亮/变暗的tag名
define auto_highlight_characters = ['linke', 'shenjian', 'zhongshan']
# 当前说话人物
default current_speaking = None
transform auto_highlight(name):
function partial(auto_highlight_transform, name=name)
init python:
from functools import partial
def auto_highlight_callback(event, name, interact=True, **kwargs):
global current_speaking
if not interact:
return
if event == 'begin':
current_speaking = name
def auto_highlight_transform(trans, st, at, name):
global current_speaking
if name == current_speaking:
trans.matrixcolor = None # 当前人物说话的效果
else:
trans.matrixcolor = SaturationMatrix(0.6) * BrightnessMatrix(-0.2) # 其他人说话的效果
return 0 # 返回0表示尽快调用
for name in auto_highlight_characters:
config.tag_transform[name] = auto_highlight(name)
# 别忘了把旁白和name_only角色加上
define narrator = Character(None, callback=auto_highlight_callback, cb_name=None)
define name_only = Character(None, callback=auto_highlight_callback, cb_name=None)
# 这里的cb_name是图像的tag,也就是说,如果你的人物定义有image这一项,那么cb_name的入参应该和image相同
define lk = Character('林恪', callback=auto_highlight_callback, cb_name='linke')
define sj = Character('沈健', callback=auto_highlight_callback, cb_name='shenjian')
define zs = Character('钟山', callback=auto_highlight_callback, cb_name='zhongshan')
这个方法有一半的内容和ConditionSwitch是一样的,只不过我们使用transform的判断替代了原本CS的判断,只需要添加图像tag就好了,但是注意,使用这个方法的前提是,展示图像的时候不带at特性,因为config.tag_transform只有不带at的时候才能生效
|