碰撞错误 self.rect.colliderect(sprite.rect)

collision error self.rect.colliderect(sprite.rect)

此代码在撞击精灵之前开始打印“碰撞”。

这定义了“子弹”

class Magic(pygame.sprite.Sprite):

    def __init__(self, x, y):
        self.x = x
        self.y = y
        self.image = pygame.image.load("Magic.png")
        self.rect = self.image.get_rect()
        pygame.sprite.Sprite.__init__(self, spritegroup)

    def is_collided_with(self, sprite):
        return self.rect.colliderect(sprite.rect)

这是碰撞检测代码

            if magic.is_collided_with(enemy1):
                print("collision")
                enemy1.kill()

这定义了敌人

class Enemy(pygame.sprite.Sprite):

    def __init__(self, x, y):
        self.x = x
        self.y = y
        self.image = pygame.image.load("Enemy1.png")
        self.rect = self.image.get_rect()
        pygame.sprite.Sprite.__init__(self, spritegroup)


    def render(self):
        screen.blit(self.image, (self.x, self.y))

enemy1是下面定义的敌人 enemy1 = Enemy(1400, 50)

pygame.Surface.get_rect.get_rect() returns 具有 Surface 对象大小的矩形,但它 returns 始终从 (0 , 0) 因为 Surface 对象没有位置。
Surface 放置在具有 blit 功能的显示器上的某个位置。

您必须通过分配给虚拟属性来设置矩形的位置(参见 pygame.Rect),例如:

class Magic(pygame.sprite.Sprite):
    # [...]

    def is_collided_with(self, sprite):
        sprite.rec.topleft = sprite.x, sprite.y
        self.rect.topleft = self.x, self.y
        return self.rect.colliderect(sprite.rect)

但是,我建议删除 xy 属性。请改用 rect.xrect.y。通过关键字参数设置矩形的位置:

class Magic(pygame.sprite.Sprite):

    def __init__(self, x, y):
        self.image = pygame.image.load("Magic.png")
        self.rect = self.image.get_rect(topleft = (x, y))
        pygame.sprite.Sprite.__init__(self, spritegroup)

    def is_collided_with(self, sprite):
        return self.rect.colliderect(sprite.rect)
class Enemy(pygame.sprite.Sprite):

    def __init__(self, x, y):
        self.image = pygame.image.load("Enemy1.png")
        self.rect = self.image.get_rect(topleft = (x, y))
        pygame.sprite.Sprite.__init__(self, spritegroup)

    def render(self):
        screen.blit(self.image, self.rect)