'元组'没有属性colliderect pygame

时间:2018-04-26 17:28:03

标签: python pygame

我试图检测十字线与我创造的目标之间的碰撞。

当检测到碰撞时,目标将从其所在的所有精灵组中消失。

如果有人可以向我解释为什么会这样,并且可能会建议解决方案我很欣赏它。谢谢!

class Cross(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = crosshairImage
        self.rect = crosshairImage
        self.shooting = 0

    def update(self):
        position = pygame.mouse.get_pos()
        self.rect = position

    def shoot(self,attack):
        if not self.shooting:
            self.shooting = 1
            return self.rect.colliderect(attack.rect)

    def undo(self):
        self.shooting = 0

class Target0(pygame.sprite.Sprite):    
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = targetImage
        self.rect = targetImage
        self.hp = 1

    def update(self):
        position0 = screen.blit(targetImage, (181.75,204))
        self.rect = position0

while running:
    milliseconds = clock.tick(FPS)
    playtime += milliseconds/1000.0

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE:
            running = False     
        elif event.type == MOUSEBUTTONDOWN:
            if cross.shoot(target0):
                target0.kill()
        elif event.type == MOUSEBUTTONUP:
            cross.undo()

    allsprites.update()

    screen.blit(background, (0,0))
    allsprites.draw(screen)
    pygame.display.flip()

    text = "FPS: {0:.2f}   Playtime: {1:.2f}".format(clock.get_fps(), playtime)
    pygame.display.set_caption(text) 

    pygame.display.flip()

2 个答案:

答案 0 :(得分:1)

您忘记将get_rect()值放在矩形上。将self.rect值更改为这些值,它应该可以正常工作

self.rect = self.image.get_rect()

答案 1 :(得分:0)

Pygasm已经提到你必须将self.rect属性设置为实际的rect实例而不是表面:self.rect = self.image.get_rect()(如果需要,也可以更改rect的坐标)。 / p>

AttributeError的起源位于update的{​​{1}}方法中,您将Cross设置为self.rect位置,这是一个元组,并且元组没有pygame.mouse.get_pos()方法,您可以使用colliderect shoot方法调用该方法。

相反,你必须更新矩形的{​​{1}}坐标(或其他一个矩形属性):

Cross