如何检查列表中的特定精灵类

时间:2016-07-06 17:18:13

标签: python pygame python-3.4

这是我当前的库存系统,我正在努力让它在一个项目被选中时进行注册,但是当精灵类被添加到列表中时,我无法让程序注册。

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)

1 个答案:

答案 0 :(得分:0)

您的if j == item_sys.Item1检查会失败,因为它没有检查j等于类类型类型。相反,它正在检查值/对象 j是否等于类类型

因此,您需要做的是获取j类型。为此,假设Item1类不是子类(如果是,则需要使用isinstance()),您可以使用if type(j) is Item1。您可以将其理解为:'如果jItem1'的类型。

为了避免运行时类型检查(这是你在这里做的),我建议在Item1类中实现一个返回项类型的方法,例如:武器,盔甲,消耗品等等,因为你开发游戏时会派上用场。

您可以更进一步,在Item1课程中实施一种获取项目子类型的方法,例如:武器 - >枪,剑,木板等等。