Pygame:TypeError:参数必须是一系列rectstyle对象

时间:2017-01-03 05:29:11

标签: python class object methods pygame

我正在尝试为简单的平台游戏添加基本的碰撞检测。我有一个类玩家,当玩家与我想要打印的平台碰撞时(“碰撞”)。我使用Platform类创建了所有平台,并将它们附加到我的方法引用collidelistall(平台)以检查冲突的列表。为什么我收到此错误?我的列表包含什么,如果不是rect对象?我已经发布了相关的代码段,但如果需要,我会发布整个内容。

感谢。

class Platform():
    def __init__(self, platformx, platformy):
        self.x = platformx
        self.y = platformy


    def draw_platform(self):
        pygame.draw.rect(screen, RED, (self.x, self.y, 40, 20))


class Player():
    def __init__(self):
        self.image = pygame.image.load('C:\\Users\\admin\\Desktop\\Player1.png').convert_alpha()
        self.rect = self.image.get_rect()

    def display_player(self):
        return self.image

    def is_collided_with(self):
        return self.rect.collidelistall(platforms)


pygame.init()
clock = pygame.time.Clock()
screen = pygame.display.set_mode(DISPLAY, FLAGS, DEPTH)
pygame.display.set_caption('Rum Islands')
generate = Player()
man = generate.display_player()

platforms = [] 

loop = True
while loop:
    for event in pygame.event.get():
        if event.type == QUIT \
            or (event.type == KEYDOWN and event.key == K_ESCAPE):
            loop = False


    if generate.is_collided_with(): #check for collision
        print("True")

    screen.fill(WHITE)

    platform_x = 0
    platform_y = 0

    for row in level:
        for col in row:
            if col == "P":
                col = Platform(platform_x, platform_y)
                col.draw_platform()
                platforms.append(col)
            platform_x += 15
        platform_y += 20
        platform_x = 0

1 个答案:

答案 0 :(得分:1)

collidelistall需要对象列表pygame.Rect()。您的班级Platform不是pygame.Rect(),不仅xy,还有其他参数和方法。

所以试试

class Platform(pygame.Rect):

    def __init__(self, x, y):
        pygame.Rect.__init__(self, x, y, 40, 20)

    def draw(self, screen):
        pygame.draw.rect(screen, RED, self)

BTW:不要在方法中使用未知变量 - 例如screen中的draw_platform。最好将其作为参数发送或在__init__中设置,以便您可以使用self.screen

你不必在任何地方添加单词platform - 即。 platformxplatformydraw_platform - 您已将此字称为类名Platform。如果你要创建新类即。 class House(Platform)然后看起来很奇怪house.draw_platform(...)