bg1rect
и bg2rect
не являются pygame.sprite.Sprite
объектами, но являются pygame.Rect
объектами.
Вы должны использовать метод colliderect
вместо pygame.sprite.collide_rect()
:
print(pygame.sprite.collide_rect(bg1rect, bg2rect))
print(bg1rect.colliderect(bg2rect))
Но обратите внимание, вы должны обновить позицию прямоугольников. Например:
bg1rect.topleft = [x,y]
bg2rect.topleft = [mushx,460]
if bg1rect.colliderect(bg2rect):
print("hit")
Как только расположение прямоугольников установлено, объекты Rect
могут использоваться для blit
Surface
объектов на цели Surface
. Например:
window.blit(bg, bgrect)
window.blit(bg1sprite.image, bg1rect)
window.blit(bg2sprite.image, bg2rect)
pygame.display.flip()
Если вы хотите, чтобы персонаж «исчез» после столкновения, тогда вам нужно остановиться, чтобы нарисовать его. Обратите внимание, что вся сцена рисуется в каждом кадре.
Добавьте состояние с жизнями игрока (player_lives = 1
). Уменьшить состояние при обнаружении столкновения. И нарисуйте игрока в зависимости от состояния:
player_lives = 1
while gameloop:
# [...]
bg1rect.topleft = [x,y]
bg2rect.topleft = [mushx,460]
if bg1rect.colliderect(bg2rect):
player_lives -= 1
# [...]
window.blit(bg, bgrect)
if player_lives > 0:
window.blit(bg1sprite.image, bg1rect)
window.blit(bg2sprite.image, bg2rect)
pygame.display.flip()