Pygame. Проблема с методом spritecollideany()
Я делаю игру где игрок может управлять машинкой и ему навстречу движутся другие машинки. Ему надо не допустить столкновения. И для этого я использую спрайты и группы. Есть класс игрока и класс (или спрайт) машинок. Они находятся в одной группе. Но при добавлении условия ниже программа сразу же закрывается. Никаких ошибок не выводит.
if pg.sprite.spritecollideany(hero, cars):
sys.exit()
Весь код:
from random import randint
import pygame as pg
import sys
pg.init()
pg.time.set_timer(pg.USEREVENT, 2000)
W = 400
H = 400
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
CARS = ('car1.png', 'car2.png', 'car3.png')
# для хранения готовых машин-поверхностей
CARS_SURF = []
# надо установить видео режим
# до вызова image.load()
sc = pg.display.set_mode((W, H))
for i in range(len(CARS)):
CARS_SURF.append(
pg.image.load(CARS[i]).convert_alpha())
class Car(pg.sprite.Sprite):
def __init__(self, x, surf, group):
pg.sprite.Sprite.__init__(self)
self.image = surf
self.rect = self.image.get_rect(
center=(x, 0))
# добавляем в группу
self.add(group)
# у машин будет разная скорость
self.speed = randint(1, 3)
def update(self):
if self.rect.y < H:
self.rect.y += self.speed
else:
# теперь не перебрасываем вверх,
# а удаляем из всех групп
self.kill()
class Hero(pg.sprite.Sprite):
def __init__(self, x, surf, group):
pg.sprite.Sprite.__init__(self)
self.image = surf
self.rect = self.image.get_rect(
center=(x, H-34))
# добавляем в группу
self.add(group)
cars = pg.sprite.Group()
scale = pg.image.load('hero.png')
hero_surf = pg.transform.scale(
scale, (scale.get_width() - 10, scale.get_height() - 18))
# hero_rect = hero_surf.get_rect()
hero = Hero(randint(20, W-20), hero_surf, cars)
# hero.add(cars)
Car(randint(1, W),
CARS_SURF[randint(0, 2)], cars)
while 1:
for i in pg.event.get():
if i.type == pg.QUIT:
sys.exit()
elif i.type == pg.USEREVENT:
Car(randint(1, W),
CARS_SURF[randint(0, 2)], cars)
pressed = pg.key.get_pressed()
if pressed[pg.K_RIGHT]:
hero.rect.x += 2
pg.display.update()
elif pressed[pg.K_LEFT]:
hero.rect.x -= 2
pg.display.update()
elif pressed[pg.K_DOWN]:
hero.rect.y += 2
pg.display.update()
elif pressed[pg.K_UP]:
hero.rect.y -= 2
pg.display.update()
# if pg.sprite.spritecollideany(hero, cars):
# sys.exit()
sc.fill(BLACK)
pg.draw.line(sc, WHITE, (W // 2, 0), (W // 2, H))
sc.blit(hero_surf, hero.rect)
cars.draw(sc)
pg.display.update()
pg.time.delay(20)
cars.update()