马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
本帖最后由 烈林凤 于 2024-9-10 21:23 编辑
事先声明,本教程最终的解决方法是由@Aaron栩生阿龙 找到的,我只是以他的基础上写了篇更详细的教程,在此放上他发布的b站专栏链接:
阿龙和他的朋友们的renpy周报#1【renpy教程】 - 哔哩哔哩 (bilibili.com)
之后我也有可能(只是可能)会把自己的教程上传到b站上,各位敬请期待,在此附上我的主页链接:
烈林凤的个人空间-烈林凤个人主页-哔哩哔哩视频 (bilibili.com)
接下来进入正题——
关于检测有无头像的代码只有一小段
[RenPy] 纯文本查看 复制代码 if not isinstance(SideImage(), Null):
虽然这只是一段平平无奇的代码,却令我和龙叔两人反复思考了许久,才终于想出了这个方法(详情可见专栏)……
首先,isinstance()函数是python中的一个函数,该函数会用来判断一个对象是否是一个已知的类型,有点类似于type(),在此引用菜鸟教程中的原文:
描述
isinstance() 函数来判断一个对象是否是一个已知的类型,类似 type()。
isinstance() 与 type() 区别:
type() 不会认为子类是一种父类类型,不考虑继承关系。
isinstance() 会认为子类是一种父类类型,考虑继承关系。
如果要判断两个类型是否相同推荐使用 isinstance()。
语法
以下是 isinstance() 方法的语法:
isinstance(object, classinfo)
参数
object -- 实例对象。
classinfo -- 可以是直接或间接类名、基本类型或者由它们组成的元组。
返回值
如果对象的类型与参数二的类型(classinfo)相同则返回 True,否则返回 False。
然后,SideImage()是renpy中原生的头像函数,会返回与当前角色对应的头像,默认为Null()【也就是空头像,但确实是存在的】
文档:界面行为(action)、值(value)和函数 — Ren'Py 中文文档 (renpy.cn)
也就意味着,一般情况下,SideImage()==Null(),但是!
经过我的测试,if SideImage()==Null():是无效的,无法通过这种判断,究其原因是因为,SideImage()并不是一个变量!【我当初明明离真相那么近,却犯了这个根本性的错误!】
既然SideImage()不是一个变量,自然不可能直接使用==进行判断,我们需要通过isinstance()来判断SideImage()是不是和Null()是同一个类型的组件。
最后,使用if not判断SideImage()是不是Null()同一类型,如果确定不是【也就是判断确定为角色头像】,则进行下一步。
至此,检测有无头像的代码讲解完成,这一代码可实际应用的地方非常广泛,最显而易见的地方就如标题所写。
[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 isinstance(SideImage(), Null):
xoffset 200
在screen say中,在window写上这段,即可实现有角色头像显示时将对话和角色名向右偏移200像素
希望各位用得高兴
|