Я составил список маркеров и список спрайтов, используя классы ниже. Как мне определить, сталкивается ли маркер со спрайтом, а затем удалить этот спрайт и маркер?
В PyGame обнаружение коллизий выполняется с помощью pygame.Rect объектов. Rect Объект предлагает различные методы для обнаружения коллизий между объектами. Даже столкновение между прямоугольным и круглым объектом, таким как ракетка и мяч, может быть обнаружено по столкновению между двумя прямоугольными объектами, ракеткой и ограничивающим ее прямоугольником мяча.
if my_sprite.rect.colliderect(my_bullet.rect): printe("hit")
Ответ 2
Насколько я понимаю pygame, вам просто нужно проверить, перекрываются ли два прямоугольника, используя colliderect метод. Один из способов сделать это - иметь в вашем Bullet классе метод, который проверяет наличие коллизий:
# I added loop for a better exit from the game loop = 1 while loop: for event in pygame.event.get(): if event.type == pygame.QUIT: loop = 0
key = pygame.key.get_pressed()
for i inrange(2): if key[player.move[i]]: player.rect.x += player.vx * [-1, 1][i]
for i inrange(2): if key[player.move[2:4][i]]: player.rect.y += player.vy * [-1, 1][i]
screen.fill(bg)
# first parameter takes a single sprite # second parameter takes sprite groups # third parameter is a do kill command if true # all group objects colliding with the first parameter object will be # destroyed. The first parameter could be bullets and the second one # targets although the bullet is not destroyed but can be done with # simple trick bellow hit = pygame.sprite.spritecollide(player, wall_group, True)
if hit: # if collision is detected call a function in your case destroy # bullet player.image.fill((255, 255, 255))
player_group.draw(screen) wall_group.draw(screen)
pygame.display.update() clock.tick(fps)
pygame.quit() # sys.exit
if __name__ == '__main__': main()
Ответ 4
Создайте группу для маркеров, а затем добавьте маркеры в группу.
Что бы я сделал, так это это: В классе для игрока:
defcollideWithBullet(self): if pygame.sprite.spritecollideany(self, 'groupName'): print("CollideWithBullet!!") returnTrue
И где-то в основном цикле:
defrun(self): if self.player.collideWithBullet(): print("Game Over")