AttributeError: 'Group' object has no attribute 'rect'
При запуске выдаётся ошибка: AttributeError: 'Group' object has no attribute 'rect'
import pygame, controls
from gun import Gun
from pygame.sprite import Group
def run():
pygame.init()
screen = pygame.display.set_mode((700,700))
pygame.display.set_caption('Space rangers')
bg_color = (0, 0, 0)
gun = Gun(screen)
bullets = Group()
inos = Group()
controls.create_army(screen, inos)
while True:
controls.events(screen, gun, bullets)
gun.update_gun()
bullets.update()
controls.update(bg_color, screen, gun, inos, bullets)
controls.update_bullets(inos, bullets)
controls.update_inos(inos)
run()
Жалуется на этот кусок:
def update_bullets(inos, bullets):
# обновление позиций пуль
for bullets in bullets.copy():
if bullets.rect.bottom <= 0:
bullets.remove(bullets)
collisions = pygame.sprite.spritecollide(bullets, inos, True, True)
Подскажите, как исправить ситуацию?
Ответы (1 шт):
Автор решения: CrazyElf
→ Ссылка
Где-то я этот код уже видел, и даже подсказки по нему помню давал. У вас тут bullets - это одновременно и исходный список и элемент списка, перебираемый через for. Я подчеркнул проблемные места:
for bullets in bullets.copy():
^^^^^^^
if bullets.rect.bottom <= 0:
^^^^^^^
bullets.remove(bullets)
^^^^^^^
В цикле используйте bullet при обращении к отдельному элементу списка, а не bullets, который является списком этих bullet:
for bullet in bullets.copy():
if bullet.rect.bottom <= 0:
bullets.remove(bullet)