使用pygame的'inflate_ip()'不会使Hitbox居中

时间:2018-12-13 20:06:11

标签: python pygame pygame-surface

我正在练习使用Pygame进行基本的碰撞检测。为了使某些碰撞更宽容,我想缩小某些对象上的方形点击框。我在对象的Hitbox上绘制了一个正方形边框以对其进行可视化。我试过使用'infate()'和'inflate_ip()';并且在执行此操作时,hitbox的视觉效果会按预期在中心周围缩小,但是在测试时,碰撞始终像hitbox源自对象的左上角一样起作用。

这似乎也适用于其他基本Rect函数,例如move()

感谢任何评论,谢谢

class Box(Sprite):
    def __init__(self, screen):
        super(Box, self).__init__()
        self.screen = screen
        self.screen_rect = self.screen.get_rect()

        self.image = pygame.Surface((64, 64))
        self.image.fill((200, 100, 200))

        #  Shrink rect
        self.rect.inflate(-32, -32)

        #  Draw hitbox
        pygame.draw.rect(self.image, (255, 0, 0), self.rect, 4)

        self.rect.center = self.screen_rect.center

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

class Cursor(Sprite):
    def __init__(self, screen):
        super(Cursor, self).__init__()
        self.screen = screen
        self.screen_rect = self.screen.get_rect()

        self.image = pygame.Surface((32, 32))
        self.image.fill((100, 0, 200))
        self.rect = self.image.get_rect()
        pygame.draw.rect(self.image, (255, 0, 0), self.rect, 3)

        self.rect.center = pygame.mouse.get_pos()

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

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

注意:我尝试像这样将rect对象分配给膨胀的rect:

  self.rect = self.rect.inflate_ip(-32, -32)

我还尝试为不同的区域使用不同的变量名

0 个答案:

没有答案