'tuple' не имеет атрибута colliderect pygame - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь обнаружить столкновение между перекрестием и целью, которую я создал.

При обнаружении столкновения цель исчезает из всех входящих в нее групп спрайтов.

Если кто-то может объяснить мне, почему это происходит, и, возможно, предложить решение, я был бы признателен. Спасибо!

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 голосов
/ 27 апреля 2018

Pygasm уже упоминал, что вы должны установить атрибуты self.rect для фактических rect экземпляров вместо поверхностей: self.rect = self.image.get_rect() (также при необходимости измените координаты прямоугольника).

AttributeError имеет происхождение в методе update Cross, где вы устанавливаете self.rect в положение pygame.mouse.get_pos(), которое является кортежем, а у кортежей нет метода colliderect который вы вызываете в shoot методе Cross.

Вместо этого необходимо обновить center координаты (или один из других атрибутов прямоугольника) прямоугольника:

def update(self):
    self.rect.center = pygame.mouse.get_pos()
0 голосов
/ 26 апреля 2018

Вы забыли поместить значение get_rect() в прямоугольник. Измените значения self.rect на эти, и оно должно работать

self.rect = self.image.get_rect()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...