Pygame:如何更改Rect的大小以为您的玩家创建一个有利的命中框

时间:2018-10-28 23:09:45

标签: python pygame

我最近尝试解决的另一个问题是调整播放器的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值。我不确定从这儿去哪里。您能告诉我我做错了什么吗,还是有更好/更简单的解决方案?

1 个答案:

答案 0 :(得分:1)

Pygame已经为此提供了一些解决方案。

如果您使用pygame的碰撞处理功能(例如pygame.sprite.spritecollidepygame.sprite.groupcollidepygame.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属性,并将其用于碰撞函数(如果已设置)。