Pygame 用于碰撞检测的自定义矩形
Pygame Custom rect for collision detection
我已经设法使用 sprite collide 让玩家与另一个 sprite 发生碰撞并且效果很好。
然而,spritecollide
函数只允许它(至少据我所知)与名为 self.rect
的矩形发生碰撞
我有一个名为 self.hitbox
的自定义矩形,我希望我的玩家与之发生碰撞,因为碰撞框矩形与内置矩形本身的大小不同
这是我与 self.rect
碰撞的代码
def collide_blocks(self, direction):
hits = pygame.sprite.spritecollide(self, self.game.block_objects, False)
if hits:
for i in hits:
if direction == "x":
if self.x_change > 0:
self.rect.x = i.rect.left - self.rect.width
if self.x_change < 0:
self.rect.x = i.rect.right
if direction == "y":
if self.y_change > 0:
self.rect.y = i.rect.top - self.rect.height
if self.y_change < 0:
self.rect.y = i.rect.bottom
如何调整我的代码以使其与 i.hitbox 而不是 i.rect 发生碰撞(我 = 精灵发生碰撞)
pygame.sprite.spritecollide
的第 4 个参数可以是用户定义的回调函数,用于计算两个精灵是否发生碰撞:
def hitbox_collide(sprite1, sprite2):
return sprite1.hitbox.colliderect(sprite2.hitbox)
hits = pygame.sprite.spritecollide(self, self.game.block_objects, False, hitbox_collide)
我已经设法使用 sprite collide 让玩家与另一个 sprite 发生碰撞并且效果很好。
然而,spritecollide
函数只允许它(至少据我所知)与名为 self.rect
我有一个名为 self.hitbox
的自定义矩形,我希望我的玩家与之发生碰撞,因为碰撞框矩形与内置矩形本身的大小不同
这是我与 self.rect
碰撞的代码def collide_blocks(self, direction):
hits = pygame.sprite.spritecollide(self, self.game.block_objects, False)
if hits:
for i in hits:
if direction == "x":
if self.x_change > 0:
self.rect.x = i.rect.left - self.rect.width
if self.x_change < 0:
self.rect.x = i.rect.right
if direction == "y":
if self.y_change > 0:
self.rect.y = i.rect.top - self.rect.height
if self.y_change < 0:
self.rect.y = i.rect.bottom
如何调整我的代码以使其与 i.hitbox 而不是 i.rect 发生碰撞(我 = 精灵发生碰撞)
pygame.sprite.spritecollide
的第 4 个参数可以是用户定义的回调函数,用于计算两个精灵是否发生碰撞:
def hitbox_collide(sprite1, sprite2):
return sprite1.hitbox.colliderect(sprite2.hitbox)
hits = pygame.sprite.spritecollide(self, self.game.block_objects, False, hitbox_collide)