我正在练习使用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)
我还尝试为不同的区域使用不同的变量名