微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决碰撞错误 self.rect.colliderect(sprite.rect)

这段代码在碰到精灵之前开始打印“碰撞”。

这定义了“子弹”

fig = plt.figure(figsize=(12,7))
ax = fig.add_subplot()
img = ax.scatter(xs,ys,c=t_low,cmap=plt.hot())
fig.colorbar(img)

ax.set_xlabel('X')
ax.set_ylabel('Y')

plt.show()

这是碰撞检测代码

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()

enemy1 是下面定义的敌人 class Enemy(pygame.sprite.Sprite): def __init__(self,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))

解决方法

pygame.Surface.get_rect.get_rect() 返回一个具有 Surface 对象大小的矩形,但它返回一个矩形,它总是从 (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,y):
        self.image = pygame.image.load("Enemy1.png")
        self.rect = self.image.get_rect(topleft = (x,spritegroup)

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。