RenPy中文空间

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 67|回复: 9

[求助] 编写的一些疑问

[复制链接]
发表于 2022-8-4 21:29:15 | 显示全部楼层 |阅读模式

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

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

x

当我想遍历字典用键作为类名引用类的信息时就会得到这个错误


                               
登录/注册后可看大图

[RenPy] 纯文本查看 复制代码
screen shop(shopitem):
    tag menu
    frame id "shoptitle":
        style "shoptitle"
        text "商店" :
            size 30
            outlines[()]

    frame:
        xalign 0.1
        add "images/parter/laoban.png"
        viewport id "shopobject":
            grid 1 len(shopitem.name):
                for object in shopitem.name:
                    imagebutton:
                        idle object.img
                        hover object.img
                        action [Play("sound","audio/objectbutton.wav"),Show("objectactive([object],[shopitem.name])")]

                        text "x”+[shopitem.name(object)]

    frame:
        align (1,0.4)
        text "[Dorise.gold]"

style shoptitle:
    xysize (100,60)
    align(0.6,0.4)
    background Frame("gui/overlay/shoptitle.png")

style shopobject:
    xysize (300,400)
    align(0.6,0.5)
    background Frame("gui/overlay/shopobject.png")

style objectuser:
    xysize (300,200)
    align(0.2,0.4)
    background Frame("gui/overlay/objectuser.png")



[RenPy] 纯文本查看 复制代码
#物品(姓名,图片路径,效果,买价=bpr,售价=spr,介绍)
#(name,img,user,bpr,spr,intr)
    define blackbread = objects(name_1,bmp_1,catejory_1,user_1,intr_1,bpr=5,spr=10)
#buff列表
    define buff.item = [
    "yanger"
    ]

#(name,img,intr,attibute)


#创建商店
    define store_items = Inventory("store_items")
    define my_bag = Inventory("my_bag")
#库列表Inventory
init -1 python:
    store_items.add("blackbread",number=1)
    store_items.add("blackbread",number=1)


init -3 python:
#(name,img,user,bpr,spr,intr="")
#物品(姓名,图片路径,效果,买价=bpr,售价=spr,介绍)
    name_1 = "黑面包"
    bmp_1 = "blackbread.png"
    catejory_1 = "食物"
    user_1 = dict(physical=5)
    intr_1 = "可以食用的黑面包"


X1$A0LP)H6OF36NG[`G$G~J.png
 楼主| 发表于 2022-8-4 21:32:00 | 显示全部楼层
虽然有大佬有源码展示出来了,但是,我想复刻一个相同的功能的时候总是难上加难。代码方面只是个萌新就是
回复 支持 反对

使用道具 举报

发表于 2022-8-4 22:11:33 | 显示全部楼层
请搞清楚数据类型,以及你代码没放全,`Inventory`和`objects`应该是两个类(不清楚,后面一个没大写不规范?),但看不出内部细节,还有`shopitem`是什么(猜是`Inventory`类的实例)

报错信息是告诉你,你对一个字符串取了属性`img`,也就是`object.img`
前面有`for object in shopitem.name`,说明`shopitem.name`是可迭代的,看命名应该是个字符串列表?那`object`显然不是你想要的`objects`类的实例,也不存在`img`属性了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-4 23:50:35 | 显示全部楼层
关于库的描写
[RenPy] 纯文本查看 复制代码
    class objects:
        def __init__(self,name,catejory,img,user,intr,bpr,spr):
            self.name = name
            self.img = img
            self.catejory = catejory
            self.user = user
            self.intr = intr
            self.buy_pri = bpr
            self.sel_pri = spr

#获取图片保存路径
        def get_icon(self):
            return self.img
#使用物品
        def use(self,player):
            for attribute in self.user:
                player.changed_by(attribute,self.user[attribute])

    class Inventory:
#添加物品
        def __init__(self,name):
            self.name = defaultdict(int)


        def add(self,object,number=1):
            if object not in self.name:
                self.name[object] = number
            else:
                self.name[object] += number
#移除物品
        def remove(self,object,number=1):
            if self.name[object] > number:
                return object
            else:
                self.name[object] -= numbeer

#移动物品,把object从bgname库中转移到name库中
        def replace(self,object,bagname,number=1):
            self.name.add(object,number)
            self.name.remove(object,bagname,number)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-4 23:54:37 | 显示全部楼层
Lost 发表于 2022-8-4 22:11
请搞清楚数据类型,以及你代码没放全,`Inventory`和`objects`应该是两个类(不清楚,后面一个没大写不规范 ...

shopitem.name是一个字典,里面的键和实例名相同,然后想这样把实例的内容引用出来
回复 支持 反对

使用道具 举报

发表于 2022-8-5 01:37:38 | 显示全部楼层
你这个看起来错误在于: for object in shopitem.name: 这个object是string,并不是一个class。如果你不是很清楚用法的话,最好先复制粘贴原来代码,让他可以运行之后,再在基础上一点一点去改,会比较容易。
回复 支持 反对

使用道具 举报

发表于 2022-8-5 08:53:31 | 显示全部楼层
接楼上补充:

[RenPy] 纯文本查看 复制代码
for object in shopitem.name:


遍历字典获得到object是字典的所有key。
楼主实际相使用的不是key,而是value,所以:

[RenPy] 纯文本查看 复制代码
                for object in shopitem.name:
                    imagebutton:
                        idle shopitem.name[object]  //idle和hover相同的话也不需要显式指定hover状态的图片
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-5 18:36:47 | 显示全部楼层
那如果字典里没有提前表示某个实例,通过函数添加一个实例在字典的操作应该怎么做。
最初仅仅增加了字符串。
[RenPy] 纯文本查看 复制代码
    class Inventory:
#添加物品
        def __init__(self,name):
            self.name = defaultdict(int)


        def add(self,object,number=1):
            if object not in self.name:
                self.name[object] = number
            else:
                self.name[object] += number
#移除物品
        def remove(self,object,number=1):
            if self.name[object] > number:
                return object
            else:
                self.name[object] -= numbeer

#移动物品,把object从bgname库中转移到name库中
        def replace(self,object,bagname,number=1):
            self.name.add(object,number)
            self.name.remove(object,bagname,number)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-5 18:38:56 | 显示全部楼层
blackpineapple 发表于 2022-8-5 01:37
你这个看起来错误在于: for object in shopitem.name: 这个object是string,并不是一个class。如果你不是 ...

是这个错误,谢谢你的建议,不过已经有一份改好的,但是楼主还是想了解更多的知识,所以想自己动手写一下这个,增长点经验
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-6 22:13:34 | 显示全部楼层
这个问题终于解决了
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2022-8-14 05:55 , Processed in 0.033199 second(s), 15 queries , File On.

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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