Проблема со спрайтами В питоне(pygame)

столкнулся с проблемой, есть программа, где ездит машинка(с помощью стрелок ), подъезжает к спрайту, и при нажатии на пробел около спрайта он должен пропасть и должен воспроизвестись соответственный звук. Спрайты, которые нужно взять, появляются раз в секунду. Проблема заключается в том, что на экране спрайт подразумевается и берется, при нажатии пробела, но его не видно) На изображении на самом деле больше 40 cпрайтов(тракторов)При появлении нового спрайта старый удаляется, но продолжает функционировать))) Помогите пожалуйста) Все используемые файлы(за исключением модуля pygame) и файл с программой в архиве здесь - https://yadi.sk/d/srMDGjW9Xg6Jlg Все звуки пробные, потом заменю на подходящие. Заранее всем спасибо) Надеюсь хоть кто ни будь откликнется(


Ответы (1 шт):

Автор решения: CrazyElf

Вы неправильно итерировались по "еде", я исправил цикл почти в конце программы и стало показывать:

import pygame, sys, time, random 
from pygame.locals import *

# Установка pygame
pygame.init()
mainClock = pygame.time.Clock()

# Настройка окна
WINDOWWIDTH = 1000
WINDOWHEIGHT = 1000
windowSurface = pygame.display.set_mode((WINDOWWIDTH, WINDOWHEIGHT), 0, 32)
pygame.display.set_caption('Спрайты и звуки')

# Настройка цвета
WHITE = (255, 255, 255)
GREEN = (0, 255, 0)

# Создание структур данных блока
car = pygame.Rect(500, 300, 40, 40)

imageCarLeft = pygame.image.load('carL.gif')
carLStretchedImage = pygame.transform.scale(imageCarLeft, (40, 40))
foodImage = pygame.image.load('90695.jpg')
foodCounter = 0
NEWFOOD = 40
FOODSIZE = 20
foods = []
for i in range(20):
    foods.append(pygame.Rect(random.randint(0, WINDOWWIDTH - 20), random.randint(0, WINDOWHEIGHT - 20), 20, 20))

# создание переменных клавиатуры
moveLeft = False
moveRight = False
moveUp = False
moveDown = False

MOVESPEED = 6

#Настройка музыки
avaria = pygame.mixer.Sound('avaria.wav')
benzin = pygame.mixer.Sound('benzin.wav')
pygame.mixer.music.load('dvigatel.wav')
pygame.mixer.music.play(-1, 0.0)
musicPlaying = True

# Запуск игрового цикла
while True:
    # проверка событий
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
        if event.type == KEYDOWN:
            #Изменение переменных клавиатуры
            if event.key == K_LEFT or event.key == K_a:
                moveRight = False
                moveLeft = True

            if event.key == K_RIGHT or event.key == K_d:
                moveLeft = False
                moveRight = True

            if event.key == K_UP or event.key == K_w:
                moveDown = False
                moveUp = True

            if event.key == K_DOWN or event.key == K_s:
                moveUp = False
                moveDown = True

        if event.type == KEYUP:
            if event.key == K_ESCAPE:
                pygame.quit()
                sys.exit()
            if event.key == K_LEFT or event.key == K_a:
                moveLeft = False
            if event.key == K_RIGHT or event.key == K_d:
                moveRight = False
            if event.key == K_UP or event.key == K_w:
                moveUp = False
            if event.key == K_DOWN or event.key == K_s:
                moveDown = False
            if event.key == K_x:
                car.top = random.randint(0, WINDOWHEIGHT - car.height)
                car.left = random.randint(0, WINDOWWIDTH - car.width)
            if event.key == K_m:
                if music.playing:
                    pygame.mixer.music.stop()
                else:
                    pygame.mixer.music.play(-1, 0.0)
                musicPlaying = not musicPlaying

        if event.type == MOUSEBUTTONUP:
            foods.append(pygame.Rect(event.pos[0] - 10, event.pos[1] - 10, 20, 20))

    foodCounter += 1
    if foodCounter >= NEWFOOD:
        # Добавление новой "еды"
        foodCounter = 0
        foods.append(pygame.Rect(random.randint(0, WINDOWWIDTH - 20), random.randint(0, WINDOWHEIGHT - 20), 20, 20))

    #Создание белого фона
    windowSurface.fill(WHITE)

    #Перемещение игрока
    if moveDown and car.bottom < WINDOWHEIGHT:
        car.top += MOVESPEED
    if moveUp and car.top > 0:
        car.top -= MOVESPEED
    if moveLeft and car.left > 0:
        car.left -= MOVESPEED
    if moveRight and car.right < WINDOWWIDTH:
        car.right += MOVESPEED
    if moveDown and car.bottom == WINDOWHEIGHT:
        avaria.play
    if moveUp and car.top == 0:
        avaria.play
    if moveLeft and car.left == 0:
        avaria.play
    if moveRight and car.right == WINDOWWIDTH:
        avaria.play


    windowSurface.blit(carLStretchedImage, car)
    # Проверка, не пересекся ли игрок с блоками "еды".
    for food in foods[:]:
        if car.colliderect(food) and event.type == KEYDOWN:
            if event.key == K_SPACE:
                foods.remove(food)
                if musicPlaying:
                    benzin.play()

    # ----> Исправил этот цикл <----             
    for food in foods:
        windowSurface.blit(foodImage, food)

    # Вывод окна на  экран
    pygame.display.update()
    mainClock.tick(40 )    
→ Ссылка