我不是很有经验,而且我在 renpy/python 中构建了一个可爱的工作清单。在尝试使我的物品可堆叠时,我遇到了一些困难。我一直试图让我的类项目对象有一个可编辑的变量/整数我不确定它是否是我正在寻找的语法,或者我是否需要以不同的方式排列我的类,如果是这样,如何?以前,库存只会将相同的项目(和图标)添加到我的显示屏幕中。这就是我想在我的指定文本中显示的内容:
class item(object):
def __init__(self, name, img, himg, THIS THING):
self.name = name
self.img = img
self.himg = himg
self.THIS THING = THIS THING
尽管名称已明确定义或在我的字段中出现某种乱码“%item.amountd”文本,但我最接近但没有收到“未定义名称”错误的是:
label start:
show screen inventory
pause
"adding another item"
$ backpack.add_item(popcorn)
jump start
return
default popcorn = item("popcorn", "inventory/ragepop_idle.png", "inventory/ragepop_hover.png", 0)
default money = 50
default backpack = container()
default inv = []
######screen
screen inventory():
zorder 2
add "images/inventory/inventorybg.png"
modal True
text "Money: [money]0" xpos 310 ypos 60 color("#FFFFFF")
hbox:
xpos 298 ypos 113
spacing 7
xmaximum 695
box_wrap True
for thing in backpack.inv:
imagebutton idle thing.item.img hover thing.item.himg action Null
text "{b}[thing.item.amt]{/b}" size 20 color("#FFFFFF") xoffset -30 yoffset 5
imagebutton:
idle "inventory/invpois.png"
hover "inventory/invpois2.png"
focus_mask True
action Hide("inventory")
##amt is what I settled on for the THIS THING
init python:
class item(object):
def __init__(self, name, img, himg, amt):
self.name = name
self.img = img
self.himg = himg
self.amt = amt
class invitem(object):
def __init__(self, item, amount):
self.item = item
self.amount = amount
class container(object):
def __init__(self):
self.inv = []
## Disregard these add/remove methods as I have to change these once I figure out how to $ amt+=1
##As they stand now, they serve to put the icon in the inventory the old unstackable way.
def add_item(self, item, amount=1):
self.inv.append(invitem(item, amount))
return("success")
def has_item(self, item, amount=1):
if item in [i.item for i in self.inv]:
if self.finditem(item).amount >= amount:
return(self.finditem(item).amount)
else: return(False)
else:
return(False)
def finditem(self, item):
return(self.inv[[i.item for i in self.inv].index(item)])
def remove_item(self, item, amount=1):
if self.has_item(item):
self.finditem(item).amount -= amount
if self.finditem(item).amount <= 0:
self.inv.pop(self.inv.index(self.finditem(item)))
return ("gone")
else:
return ("more left")
else:
return ("not found")
当我运行它时,库存显示屏幕首先是空的,然后项目出现在那里,如下所示: example run
不幸的是,那个 0 将是我放在那里的任何东西,我无法弄清楚如何在游戏过程中通过调用项目或试图让项目调用一个易于编辑的变量来添加或减去“amt”和显示它,因为它是''amt''。
这是我应该告诉你我所做的一切的部分。这对我来说很难,因为我已经尝试了很多不同的东西的变体,以至于我无法详细了解输入的内容。本质上,我尝试了通过文档和其他人的论坛结果找到的插入 amt 的所有变体,并试图使其与我的项目一起工作,并且大部分都得到了一堆“类项目没有属性 amt”和“名称 amt 未定义”。在那次失败之后,我试图说服我的项目从一个完全独立的变量中获取它的 amt。我已经成功且轻松地使用插值文本在该库存屏幕上显示钱。它只要求输入“文本”money: [money].0”,并且在游戏过程中使用 $money 1+10 轻松更改,
提前感谢您对我做错的任何想法!