这是我当前的库存系统,我正在努力让它在一个项目被选中时进行注册,但是当精灵类被添加到列表中时,我无法让程序注册。
import pygame
import Constants
import item_sys
clock = pygame.time.Clock()
screen = pygame.display.set_mode(Constants.screen_size)
inv = pygame.image.load("inv.png").convert_alpha()
gunx = -200
guny = -200
#sprite groups
item_list = pygame.sprite.Group()
class Invent_Sys():
def __init__(self):
self.inventory = []
self.inventory_state = False
self.sqaure = 36
def uninventory(self):
self.inventory_state = False
def inventory_u(self):
ITEMS,time_ms_mine = pygame.USEREVENT +1, 60
pygame.time.set_timer(ITEMS, time_ms_mine)
while self.inventory_state:
pos = pygame.mouse.get_pos()
x = pos[0]
y = pos[1]
pygame.mouse.set_visible(True)
print(self.inventory)
screen.blit(inv,(0,0))
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit
elif event.type == pygame.MOUSEBUTTONDOWN:
print(pos)
elif event.type == ITEMS:
for i, j in enumerate(self.inventory):
if j == item_sys.Item1:
print('test')
gunx = 14
guny = 395
gun = item_sys.Item1(gunx,guny)
gun.rect.x = gunx
gun.rect.y = guny
item_list.add(gun)
答案 0 :(得分:0)
您的if j == item_sys.Item1
检查会失败,因为它没有检查j
等于类类型的类型。相反,它正在检查值/对象 j
是否等于类类型。
因此,您需要做的是获取j
的类型。为此,假设Item1
类不是子类(如果是,则需要使用isinstance()),您可以使用if type(j) is Item1
。您可以将其理解为:'如果j
是Item1
'的类型。
为了避免运行时类型检查(这是你在这里做的),我建议在Item1
类中实现一个返回项类型的方法,例如:武器,盔甲,消耗品等等,因为你开发游戏时会派上用场。
您可以更进一步,在Item1
课程中实施一种获取项目子类型的方法,例如:武器 - >枪,剑,木板等等。