#python #pygame #collision #rectangles
Вопрос:
Мне удалось использовать sprite collide, чтобы заставить игрока столкнуться с другим спрайтом, и это хорошо работает.
Однако spritecollide
функция позволяет ей (насколько я могу понять, по крайней мере) сталкиваться только с прямой кишкой, называемой self.rect
У меня есть пользовательская прямая self.hitbox
кишка, с которой я хочу, чтобы мой плеер столкнулся, так как прямая кишка хитбокса отличается размером от самой встроенной прямой кишки
Вот мой код для столкновения с самим собой.прямо
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 (I = спрайт столкнулся с)
Комментарии:
1. Не могли бы вы просто создать
hitbox
pygame.Rect
объект, а затем использоватьpygame.Rect.colliderect()
его для обнаружения столкновений?
Ответ №1:
4-м аргументом pygame.sprite.spritecollide
может быть определенная пользователем функция обратного вызова, используемая для вычисления, сталкиваются ли два спрайта:
def hitbox_collide(sprite1, sprite2):
return sprite1.hitbox.colliderect(sprite2.hitbox)
hits = pygame.sprite.spritecollide(self, self.game.block_objects, False, hitbox_collide)
Комментарии:
1. @WilliamRedding Я не вижу вашего кода. Я дал вам общий ответ, но вы должны сами найти ошибки в своем коде.
2. Хорошо, спасибо за вашу помощь в обнаружении!