如何在Renpy的Show()函数中传参并在新屏幕显示字典内容?
Ren'Py 常见问题解决:Show() 传参与屏幕展示字典内容
问题1:正确使用 Ren'Py 的 Show() 函数
你的代码里 Show("showBio([i], [heroes])") 的写法是错误的——Ren'Py 的 Show 动作不需要把参数用字符串插值包裹,而是直接在屏幕名后传递关键字参数,对应目标屏幕的参数名即可。
错误原因:你把变量转成了字符串传递,但 Show 需要的是实际的 Python 变量,而非字符串形式的变量名。
正确写法示例:
textbutton "[i]" action Show("showBio", id=i, char_dict=heroes)
问题2:在屏幕中展示字典内容
要在屏幕里正确展示字典内容,需要注意三个关键点:
1. 确保字典键唯一
原代码里的字典存在键重复问题:{ Someone : 1, Someone: 2},字典中重复的键会被后面的覆盖,最终只会保留最后一个键值对。先修正字典定义:
define python: # 使用唯一的字符串/变量作为字典键 heroes = { "Hero1": 1, "Hero2": 2 }
2. 避免参数名与Python内置关键字冲突
原屏幕用 dict 作为参数名,而 dict 是 Python 内置的类型关键字,会引发潜在冲突,建议改成更具语义的名称,比如 char_dict:
screen showBio(id, char_dict): frame: xsize 300 ysize 300 vbox: # 直接通过键从字典中取值并展示 text f"角色: {id}\n对应数值: {char_dict[id]}" # 或者用Ren'Py原生的插值语法: # text "角色: [id]\n对应数值: [char_dict[id]]"
3. 正确传递字典到目标屏幕
结合上面的修正,最终的 characters 屏幕代码如下:
screen characters(): tag menu use game_menu(_("Heroes"), scroll="viewport"): for i in heroes: textbutton "[i]" action Show("showBio", id=i, char_dict=heroes)
内容的提问来源于stack exchange,提问作者Nurik Zhumashev
相关产品推荐
相关产品推荐

