мой первый вопрос здесь и начинающий в python
Я хочу сделать простой шутер (типа Chicken Invaders). Список прямоугольников (враги) и меньших прямоугольников (боеприпасы), которые должны «убивать» врагов при столкновении. Я создал список прямоугольников в случайных местах на экране.
enemies = []
for i in range(ENEMYCOUNT):
enemySize = random.randint(ENEMYMINSIZE, ENEMYMAXSIZE)
newEnemy = pygame.Rect(random.randint(0, WINDOWWIDTH - enemySize),
random.randint(0, WINDOWWIDTH-200), enemySize, enemySize)
enemies.append(newEnemy)
Мои `` боеприпасы '' - это список невидимых прямоугольников, которые появляются при щелчке мыши, а затем перемещаются вверх.
ammo = []
for i in range(1, 5):
ammo.append(pygame.Rect(0, 0, 0, 0))
Я сделал для одиночного врага и одиночных боеприпасов, и он работает как задумано. Теперь я хочу создать больше врагов и проверить, поражен ли какой-либо из врагов боеприпасами.
for e in enemies:
for a in ammo:
if e.colliderect(a):
enemies.remove(e)
Но я продолжаю получать
if e.colliderect (a): AttributeError: объект 'NoneType' не имеет атрибута 'colliderect'
Я изучаю книгу «CreateWithpython» и копирую части кода, которые мне нужны, но я не мог решить эту проблему. Я не вижу проблемы, поскольку оба моих списка состоят из объектов Rect. Любая помощь будет оценена
e
принадлежитNoneType
, что буквально означаетe = None
. Посколькуe
- это элемент из спискаenemies
, к которому вы добавили объектыnewEnemy
(в нашем случаеpygame.Rect
). Поэтому вы должны убедиться, что этиRect
объекты инициализированы правильно и не относятся к типуNone
. - person albert   schedule 31.01.2016for
. Это очень популярная проблема. Решение: создать новый список с неотъемлемыми элементами и позже назначить егоenemies
. - person furas   schedule 31.01.2016