我最近尝试解决的另一个问题是调整播放器的Hitbox的大小。这是我尝试更改点击框(矩形)大小的方法:
self.pseudo_rect = self.image.get_rect() # This is the rect from the player's image to use as a reference
self.rect = pygame.Rect((self.pseudo_rect.x,self.pseudo_rect.y), (self.pseudo_rect.width,self.pseudo_rect.height)) # This is where I used the above values to make a rect with the dimensions I want
测试后我发现,当加/减一个值时,只有宽度和高度会改变,而不是x或y值。我不确定从这儿去哪里。您能告诉我我做错了什么吗,还是有更好/更简单的解决方案?
答案 0 :(得分:1)
Pygame已经为此提供了一些解决方案。
如果您使用pygame的碰撞处理功能(例如pygame.sprite.spritecollide
,pygame.sprite.groupcollide
或pygame.sprite.spritecollideany
),请注意,您可以使用回调函数来计算两个精灵是否发生碰撞({ {1}}参数。
使用的默认值为pygame.sprite.collide_rect
,但在您的情况下,您应该看看pygame.sprite.collide_rect_ratio
:
pygame.sprite.collide_rect_ratio()
两个小精灵之间的碰撞检测,使用按比例缩放的矩形。
collided
collide_rect_ratio(ratio) -> collided_callable
Here's如何实现A callable class that checks for collisions between two sprites, using a scaled version of the sprites rects.
Is created with a ratio, the instance is then intended to be passed as a collided callback function to the *collide functions.
A ratio is a floating point number - 1.0 is the same size, 2.0 is twice as big, and 0.5 is half the size.
。
当然,如果您需要一些自定义行为,则可以自己编写这样的回调函数。
因此,也许您想更改该功能以检查精灵是否具有collide_rect_ratio
属性,然后使用它代替pseudo_rect
属性。
然后,在您的Sprite类中,您可以执行以下操作:
rect
如果您想给精灵一个更大的Hitbox(别忘了将您更改的所有self.rect = self.image.get_rect()
self.pseudo_rect = self.rect.inflate(5, 5)
都将pseudo_rect的center
属性设置为rect.center
)。
另一种方法是给您的精灵一个rect
属性,并将其用于碰撞函数(如果已设置)。