RenPy中文空间

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 927|回复: 3

[已解决] 界面刷新和错误的键值两个问题

[复制链接]
发表于 2020-4-10 10:31:51 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 Fridde 于 2020-4-10 19:02 编辑

我目前碰到两个问题毫无头绪,希望有大佬能解惑或者给个思路
1、奇怪的无效值
程序头定义了一个嵌套的字典用来存储数据信息,定义如下:

[RenPy] 纯文本查看 复制代码
define DroneINFO = {
    "0" : {"model_name" : "当前无可用设计"},
    "1" : {"model_name" : "简单原始款", "design_progress" : 0, "design_increase" : 10, "design_done" : False, "inventory" : 0, "is_unlock" : True, "selling_price" : 800, "package_progress" : 0},
    "2" : {"model_name" : "飞行强化款", "design_progress" : 0,  "design_increase" : 5, "design_done" : False, "inventory" : 0, "is_unlock" : False, "selling_price" : 1500, "package_progress" : 0},
    "3" : {"model_name" : "拍摄强化款", "design_progress" : 0,  "design_increase" : 5, "design_done" : False, "inventory" : 0, "is_unlock" : False, "selling_price" : 1500, "package_progress" : 0},
    "4" : {"model_name" : "迷你便携款", "design_progress" : 0,  "design_increase" : 5, "design_done" : False, "inventory" : 0, "is_unlock" : False, "selling_price" : 1100, "package_progress" : 0},
    "5" : {"model_name" : "旗舰级设计", "design_progress" : 0,  "design_increase" : 2, "design_done" : False, "inventory" : 0, "is_unlock" : False, "selling_price" : 2700, "package_progress" : 0},
}


其他键值部分调用都无问题。只有 ‘package_progress’这部分会莫名其妙报错:
报错部分的代码如下,making_select是一个变量,开头有定义default making_select = "0",后续根据按钮切换值:
[RenPy] 纯文本查看 复制代码
screen busniess_status():
    python:
        work_cur_design = DroneINFO[blueprint_select]["model_name"]
        work_used_blueprint = DroneINFO[making_select][ "model_name"]
        work_cur_design_complet = DroneINFO[blueprint_select]["design_progress"]
        work_progress = DroneINFO[making_select]['package_progress']

    vbox:
        xpos 230 ypos 382
        text "[work_cur_design]" color"#d0cfcb"
        text "设计完成度:[work_cur_design_complet]%" style "quick_button_text" color"#d0cfcb"
        null height 29
        text "拥有[work_cur_material]%零件" color"#d0cfcb"
        null height 27
        text "[work_used_blueprint]" color"#d0cfcb"
        text "组装完成度:[work_progress]%" color"#d0cfcb" style "quick_button_text"
        null height 25
        text "[work_cur_requires]" color"#d0cfcb"


报错提示↓
QQ图片20200410101021.png

让我想不通的是前三句调用都没问题,只有第四句涉及到了package_progress这个键值就报错。
注释掉work_progress = DroneINFO[making_select]['package_progress']后就不报错,这是为什么呀?
而且在程序的其他部分也多次通过 DroneINFO[making_select]['package_progress'] 调用数据,也都不报错





2、界面刷新
我现在有一个screen busniess_status ,里面的文字按钮需要通过变量判断是否显示:
[RenPy] 纯文本查看 复制代码
screen busniess_status():
    hbox:
        xpos 1360 ypos 590
        if DroneINFO["1"]["design_done"]:
            textbutton "简单原始款" text_size 24 action SetVariable("making_select","1")
        null width 30
        if DroneINFO["2"]["design_done"]:
            textbutton "飞行强化款" text_size 24 action SetVariable("making_select","2")
        null width 30
        if DroneINFO["3"]["design_done"]:
            textbutton "拍摄强化款" text_size 24 action SetVariable("making_select","3")


这是调用到这个screen的label, 这里的 main_work_interface 里包含一个imagemap来触发各种功能。
[RenPy] 纯文本查看 复制代码
label Main_Mystudio:
    scene bg mystudio_interface
    show screen top_ui_bar
    show screen busniess_status
    show screen tooltip_screen
    call screen main_work_interface


当我通过main_work_interface里的功能改变了 DroneINFO["1"]["design_done"] 的值后,对应按钮并没有当场出现。
只有当我跳转到Main_Mystudio意外的label后,再次跳转回来,busniess_status 里的按钮才判定满足if条件显示textbutton。补张图示方便理解↓
未标题-1.jpg

请问是否有啥办法可以立即显示?

发表于 2020-4-10 16:44:10 | 显示全部楼层
第一个问题,“0”属性里没有‘package_progress’这个字段,所以初始化会报错

评分

参与人数 1干货 +1 收起 理由
BuErShen + 1 感谢解答!

查看全部评分

回复 支持 反对

使用道具 举报

发表于 2020-4-10 16:53:01 | 显示全部楼层
第二个问题,改了值后,需要重新show一下screen busniess_status吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-10 19:02:07 | 显示全部楼层
小猪 发表于 2020-4-10 16:44
第一个问题,“0”属性里没有‘package_progress’这个字段,所以初始化会报错

...

十分感谢大佬提点!第一个问题回头自己看都忍不住被自己蠢哭,居然完全没发觉  OTL


第二个问题解决了,分享下情况。
首先我每个功能执行完都会 jump Main_Mystudio。如上所述,在main_mystudio里包含了 show screen busniess_status语句。可是依然没刷新。必须要关闭次界面再打开。才会正确显示改变后的内容。
经提醒后尝试更改。每次行动结束后改为 jump finished_work
[RenPy] 纯文本查看 复制代码
label finished_work:
    show screen inventory_interface
    show screen busniess_status
    jump Main_Mystudio

依然情况没变,还是需要去到别的部分回来才刷新,想了想跳转出去做了啥,也就是hide然后show,试过了show无效然后换hide
[RenPy] 纯文本查看 复制代码
label finished_work:
hide screen inventory_interface
hide screen busniess_status
jump Main_Mystudio

好了,问题解决,执行完之前的功能后跳转到finished_work把包含有需要变量控制内容隐藏的screen全部关闭,然后在跳转到main_mystudio重新打开。就是变更后的内容了。只不过有个小小的问题,由于hide然后show,内容会闪烁一下....

结论,已经打开的screen,再次运行show语句不会重新加载内容,需要hide,然后再次show的时候程序才会重新构建screen的内容。
所以,我把需要变量控制的内容放在需要一直显示的srceen内这个界面设计就是个败笔...
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2020-12-3 17:57 , Processed in 0.035176 second(s), 12 queries , File On.

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

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