找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 410|回复: 2

[已解决] 如何刷新界面的变量

[复制链接]
发表于 2023-4-20 21:38:11 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 midoriq 于 2023-4-21 10:40 编辑

各位大佬好,我想实现一个功能:把一个东西拖到对应的篮子上,如果拖到正确的篮子上,就弹出介绍,如果拖到错误的篮子上,则显示错误,让玩家继续拖动。


我看了官方文档的draggroup功能案例,写了以下代码:
[RenPy] 纯文本查看 复制代码
label start:
    $answer=0
    call screen fenyao
    call screen jieshao

[RenPy] 纯文本查看 复制代码
init python:

    def detective_dragged(drags, drop):
        if not drop:
            return

        store.detective = drags[0].drag_name
        store.city = drop.drag_name
        if drags[0].drag_name==drop.drag_name:
            answer=0
            return True
        else:
            answer=1
            return 

[RenPy] 纯文本查看 复制代码
screen fenyao():
    showif answer==1:
        text "答错了"
    draggroup:

        # 药
        drag:
            drag_name "白术"
            child "yaocao1.png"
            droppable False
            dragged detective_dragged
            xcenter 0.5 ycenter 0.15
        # 篮子
        drag:
            drag_name "白术"
            child "yaokuang.png"
            draggable False
            xcenter 0.25 ycenter 0.4
        drag:
            drag_name "半夏"
            child "yaokuang.png"
            draggable False
            xcenter 0.75 ycenter 0.4


我的想法是这样的,如果玩家拖到错误的地方,answer就会等于1,然后showif answer==1,显示答错了。但是在这个界面中answer一直还是0,怎么能刷新这个界面,让他显示答错了呢?
已经搜索过,没有找到相关的解答,非常感谢各位大佬。
发表于 2023-4-21 00:01:01 | 显示全部楼层
本帖最后由 Lost 于 2023-4-21 00:02 编辑

嗯,这不仅仅是界面没刷新的问题了,首先有一个基础的知识您可能不太清楚:变量作用域。这应该是 Python 的基础了,函数中的变量默认可都是局域变量……

很好检查,`detective_dragged` 中的 `answer` 先调用一下(比如放在赋值语句右边、空放等等)看看就知道了,报错会说根本就是未定义的

解决办法很简单,`global answer` 声明一下,或者使用 `store.answer` 来调用都行

参考文档:https://doc.renpy.cn/zh-CN/python.html#named-stores

***

然后交互的问题,呃,我不知道是不是哪里有什么正规统一写法,至少我就加了个重启交互函数,之前在 renpy 源码里乱翻着看到的,文档里倒是有一句说明(https://doc.renpy.cn/zh-CN/other.html#renpy.restart_interaction

综上,那个回调函数应该这样写:

[RenPy] 纯文本查看 复制代码
init python:
    def detective_dragged(drags, drop):
        global answer
        if not drop:
            return

        if drags[0].drag_name == drop.drag_name:
            # store.answer = 0
            return True
        else:
            # store.answer = 1
            answer = 1
            renpy.restart_interaction()
            return

评分

参与人数 1活力 +300 干货 +3 收起 理由
被诅咒的章鱼 + 300 + 3 感谢解答!

查看全部评分

回复 支持 1 抱歉 0

使用道具 举报

 楼主| 发表于 2023-4-21 10:40:54 | 显示全部楼层
Lost 发表于 2023-4-21 00:01
嗯,这不仅仅是界面没刷新的问题了,首先有一个基础的知识您可能不太清楚:变量作用域。这应该是 Python 的 ...

太感谢了!!!!!
回复 支持 抱歉

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-21 20:25 , Processed in 0.115311 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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