找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 876|回复: 8

[求助] 关于存读档和SetVariable的几个问题,感谢解答!

[复制链接]
发表于 2023-1-12 00:57:32 | 显示全部楼层 |阅读模式

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

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

×

这里是代码小白。
同类帖子我去看过了,但是并没有解决我的问题。
用init python 生成的class和list
用define 定义的数值变量 a
先是在screen 用 SetVariable修改过
之后又在label 中 用 $  修改过 a
保存,关闭游戏后再读档,数据就还原成初始值
看了有人使用default,然而我这里用了就报错。

另外SetVariable 不知道是不是对定义的变量有什么要求
我这里的问题是
使用SetVariable 可以修改 define 的变量 c
但是 $ 的变量d却不行(然而我看别人的演示是可以的)


以及,我 define c = 10 但是在 使用SetVariable(“c”,c+1)时,它似乎将c+1当作字符赋给c,
莫非它对变量命名也有要求吗?翻文档似乎没有讲





发表于 2023-1-12 08:41:48 | 显示全部楼层
Talk is cheap, show me the code.
回复 支持 抱歉

使用道具 举报

 楼主| 发表于 2023-1-12 12:47:44 | 显示全部楼层
被诅咒的章鱼 发表于 2023-1-12 08:41
Talk is cheap, show me the code.

是生成npc,存读档用的是这个帖子里的大佬代码。
每次重启,之前存档生成的npc全都没有了。
https://www.renpy.cn/forum.php?mod=viewthread&tid=349&highlight=npc

然后下面就是我生成角色的代码。(不太会贴)
字符类修改似乎重新读档还能保存,但是数值类每次都会还原
[RenPy] 纯文本查看 复制代码
#玩家初始基础属性
define Role = Player("——","images/man/role.png")
define player_name = Role.name
define player_state = "无"
define player_sex="女"
define player_money=5000
define player_age=renpy.random.randint(15,20)
define player_element="水"
define player_state="健康"
define player_level = 1
define player_img = Role.img
define player_occupation = "无"
# define  player_hp=Role.Initial_hp+Role.Equip_hp
# define  player_mp=Role.Initial_mp+Role.Equip_mp
# define  player_STR=Role.Initial_STR+Role.Equip_STR
# define  player_VIT=Role.Initial_VIT+Role.Equip_VIT
# define  player_INT=Role.Initial_INT+Role.Equip_INT
# define  player_LUK=Role.Initial_LUK+Role.Equip_LUK
##记录玩家所在位置
define playerspot = "庭院"
define player_point = 6
#事件/剧情
define player_charms = Role.Initial_charms+Role.Equip_charms

##玩家形象
define PR =Character("[player_name]",image = "PR" )
image PR = "[player_img]"
image side PR a :
    "[player_img]"
    zoom 0.55



##,Initial_hp,Initial_mp,Initial_STR,Initial_VIT,Initial_INT,Initial_LUK,Initial_charms,
##角色初始信息
init -1 python:
    from collections import defaultdict
    class Player:
        def __init__(self, name,img):
            self.name = name
            self.Initial_hp=21
            self.Initial_mp=10
            self.Initial_STR=3
            self.Initial_VIT=2
            self.Initial_INT=6
            self.Initial_LUK=7
            self.Initial_charms=10
            self.img = img
            #装备属性
            self.Equip_hp=0
            self.Equip_mp=0
            self.Equip_level=0
            self.Equip_STR=0
            self.Equip_VIT=0
            self.Equip_INT=0
            self.Equip_charms=0
            self.Equip_LUK=0

##


回复 支持 抱歉

使用道具 举报

 楼主| 发表于 2023-1-12 13:01:42 | 显示全部楼层
这个是显示玩家信息的界面(原谅我这并不简洁的代码
[RenPy] 纯文本查看 复制代码
screen player_attribution:
        modal True
        frame:
            pos (1180,200)
            xsize 100
            ysize 300
            vbox:
                textbutton "角色" action Hide("player_attribution")
                textbutton "背包" action Show("bagopen"),Hide("player_attribution")
                textbutton "技能" action Hide("player_attribution")
                textbutton "装备" action Hide("player_attribution")
                textbutton "情报" action Hide("player_attribution")
                textbutton "购物" action Hide("player_attribution"),Jump("shop01")
    ##角色形象
        frame:
            pos (150,200)
            xsize 280
            ysize 330
            add "[player_img]" xycenter(0.5,0.4) zoom 0.7
            textbutton "更换形象" ypos 0.0
            text "升级所需经验:" ypos 0.8
        frame:
            pos (150,500)
            xsize 150
            ysize 30
            bar value AnimatedValue(value=player_exp,range = needexp) xmaximum 1.0 ypos 0.0
            text str(player_exp)+"/"+ str(needexp) ypos 0.0
    ##角色信息
        frame:

            pos(420,200)  #1280,720
            xsize 250
            ysize 300
            has viewport:
                draggable True
                mousewheel True
                arrowkeys True
                scrollbars "vertical"
                vbox:
                    $  player_hp=Role.Initial_hp+Role.Equip_hp
                    $  player_mp=Role.Initial_mp+Role.Equip_mp
                    $  player_STR=Role.Initial_STR+Role.Equip_STR
                    $  player_VIT=Role.Initial_VIT+Role.Equip_VIT
                    $  player_INT=Role.Initial_INT+Role.Equip_INT
                    $  player_LUK=Role.Initial_LUK+Role.Equip_LUK
                    text "基础信息"
                    spacing 10
                    text "姓名:[player_name]"
                    text "金钱:[player_money]两"
                    text "身份:[player_occupation]"
                    text "名气:默默无闻"
                    text "年龄:[player_age]"
                    text "性别:[player_sex]"
                    text "战斗信息"
                    grid 2 4:
                        text "状态:[player_state]"
                        text "等级:[player_level]"
                        text "体力:[player_hp]"
                        text "精力:[player_mp]"
                        text "攻击:[player_STR]"
                        text "防御:[player_VIT]"
                        text "智力:[player_INT]"
                        text "幸运:[player_LUK]"
回复 支持 抱歉

使用道具 举报

 楼主| 发表于 2023-1-12 13:06:59 | 显示全部楼层
还有就是游戏开始分配技能点
昨天SetVariable似乎一直把后面的变量当成字符,然而我今天试试又正常了
完全不懂 = =
[RenPy] 纯文本查看 复制代码
   
 ##技能点分配sc
    frame:
        pos(0.3,0.45)
        xsize 350
        ysize 300
        padding (10, 10)
        vbox:
            text "技能点分配:(当前技能点还剩[skillpoint])"
            hbox:
                if Role.Initial_hp == 0:
                    textbutton "-"
                else:
                    textbutton "-" action SetVariable("Role.Initial_hp",Role.Initial_hp - 1),SetVariable("skillpoint", skillpoint+1)
                text "体力:[Role.Initial_hp]"
                if skillpoint <= 0:
                    textbutton "+" action None
                else:
                    textbutton "+" action SetVariable("Role.Initial_hp",Role.Initial_hp + 1),SetVariable("skillpoint", skillpoint-1)
            hbox:
                if Role.Initial_mp == 0:
                    textbutton "-"
                else:
                    textbutton "-" action SetVariable("Role.Initial_mp",Role.Initial_mp - 1),SetVariable("skillpoint", skillpoint+1)
                text "精力:[Role.Initial_mp]"
                if skillpoint <= 0:
                    textbutton "+" action None
                else:
                    textbutton "+" action SetVariable("Role.Initial_mp",Role.Initial_mp + 1),SetVariable("skillpoint", skillpoint-1)
            hbox:
                if Role.Initial_STR == 0:
                    textbutton "-" action None
                else:
                    textbutton "-" action SetVariable("Role.Initial_STR",Role.Initial_STR - 1),SetVariable("skillpoint", skillpoint+1)
                text "武力:[Role.Initial_STR]"
                if skillpoint <= 0:
                    textbutton "+" action None
                else:
                    textbutton "+" action SetVariable("Role.Initial_STR",Role.Initial_STR + 1),SetVariable("skillpoint", skillpoint-1)
            hbox:
                if Role.Initial_VIT == 0:
                    textbutton "-" action None
                else:
                    textbutton "-" action SetVariable("Role.Initial_VIT",Role.Initial_VIT - 1),SetVariable("skillpoint", skillpoint+1)
                text "防御:[Role.Initial_VIT]"
                if skillpoint <= 0:
                    textbutton "+" action None
                else:
                    textbutton "+" action SetVariable("Role.Initial_VIT",Role.Initial_VIT + 1),SetVariable("skillpoint", skillpoint-1)
            hbox:
                if Role.Initial_INT == 0:
                    textbutton "-" action None
                else:
                    textbutton "-" action SetVariable("Role.Initial_INT",Role.Initial_INT - 1),SetVariable("skillpoint", skillpoint+1)
                text "智力:[Role.Initial_INT]"
                if skillpoint <= 0:
                    textbutton "+" action None
                else:
                    textbutton "+" action SetVariable("Role.Initial_INT",Role.Initial_INT + 1),SetVariable("skillpoint", skillpoint-1)
            hbox:
                if Role.Initial_charms == 0:
                    textbutton "-" action None
                else:
                    textbutton "-" action SetVariable("Role.Initial_charms",Role.Initial_charms - 1),SetVariable("skillpoint", skillpoint+1)
                text"魅力:[Role.Initial_charms]"
                if skillpoint <= 0:
                    textbutton "+" action None
                else:
                    textbutton "+" action SetVariable("Role.Initial_charms",Role.Initial_charms + 1),SetVariable("skillpoint", skillpoint-1)
            hbox:
                if Role.Initial_LUK == 0:
                    textbutton "-" action None
                else:
                    textbutton "-" action SetVariable("Role.Initial_LUK",Role.Initial_LUK - 1),SetVariable("skillpoint", skillpoint+1)
                text"幸运:[Role.Initial_LUK]"
                if skillpoint <= 0:
                    textbutton "+" action None
                else:
                    textbutton "+" action SetVariable("Role.Initial_LUK",Role.Initial_LUK + 1),SetVariable("skillpoint", skillpoint-1)
    ##确认sc
    frame:
        align(0.8,0.8)
        hbox:
            spacing 30
            textbutton "确认" action Jump("changeinfo"),Hide("name_input")
回复 支持 抱歉

使用道具 举报

 楼主| 发表于 2023-1-12 13:09:05 | 显示全部楼层
但是每次关闭游戏再读档后,原先的数值又恢复成class Player设置的数值。
回复 支持 抱歉

使用道具 举报

发表于 2023-1-12 13:34:22 | 显示全部楼层
一言以蔽之,define是存常量的,就是不会变的量。
default是存变量的,你这个需要存上变化,必须用default。
回复 支持 抱歉

使用道具 举报

 楼主| 发表于 2023-1-12 14:51:38 | 显示全部楼层
blackpineapple 发表于 2023-1-12 13:34
一言以蔽之,define是存常量的,就是不会变的量。
default是存变量的,你这个需要存上变化,必须用default ...

谢谢解答,但是我要改变的是class 里面的数值,像生成npc那个,我default 生成列表存数据似乎也没用
回复 支持 抱歉

使用道具 举报

 楼主| 发表于 2023-1-12 14:55:34 | 显示全部楼层
blackpineapple 发表于 2023-1-12 13:34
一言以蔽之,define是存常量的,就是不会变的量。
default是存变量的,你这个需要存上变化,必须用default ...

好的,我突然明白了,我再去试试!
回复 支持 抱歉

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-22 11:51 , Processed in 0.104568 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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