Я не очень опытный, и у меня есть прекрасный рабочий инвентарь, который я построил в 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")
Когда я запускаю это, сначала отображается экран инвентаризации, а затем появляется элемент, подобный этому: пример выполнения
К сожалению, 0 - это все, что я положил туда, и я не могу понять, как прибавить или вычесть '' amt '' во время игры, вызвав предмет или попытавшись получить элемент, чтобы вызвать легко редактируемую переменную и отобразить ее как «amt».
Это та часть, где я должен рассказать вам все, что я пробовал. Это тяжело для меня, потому что я пробовал так много вариаций стольких разных вещей, что не могу понять, что именно было напечатано. По сути, я поиграл со всеми вариантами интерполяции amt, которую я мог найти через документацию и результаты форумов других людей, и пытался заставить его работать с моими предметами, и в основном получил кучу «У элемента класса нет атрибута amt» и "имя не определено". После того, как это не удалось, я попытался убедить свой предмет получить его из совершенно отдельной переменной. Я успешно и легко использовал интерполированный текст для отображения денег на экране инвентаря. он просто запрашивает "текстовые" деньги: [деньги] .0 "и легко изменяется во время игры с $ money 1 + 10 и т. д. c. Я просто не смог убедить его в правильной работе, если интерполированная информация, которую я Я пытаюсь получить его из класса предметов.
Заранее благодарим вас за любые идеи о том, что я делаю неправильно!