首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >碰撞误差self.rect.colliderect(sprite.rect)

碰撞误差self.rect.colliderect(sprite.rect)
EN

Stack Overflow用户
提问于 2021-03-02 13:58:32
回答 1查看 118关注 0票数 1

这段代码在击中sprite之前开始打印“冲突”。

这定义了“子弹”。

代码语言:javascript
复制
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)

这是碰撞检测代码

代码语言:javascript
复制
            if magic.is_collided_with(enemy1):
                print("collision")
                enemy1.kill()

这就定义了敌人

代码语言:javascript
复制
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)下面的敌人

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-02 14:02:03

pygame.Surface.get_rect.get_rect()返回一个具有Surface对象大小的矩形,但它返回的矩形总是以(0,0)开头,因为Surface对象没有位置。

使用blit函数将该曲面放置在显示器上的一个位置。

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

代码语言:javascript
复制
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代替。通过关键字参数设置矩形的位置:

代码语言:javascript
复制
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)
代码语言:javascript
复制
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)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66440844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档