Pygame Стирание изображений на фоне

Вы кладете изображение на поверхность, чтобы использовать его в качестве фона. Затем вы нажимаете кнопку X, чтобы переместить изображение на той же поверхности, как вы стираете изображение? Пока что у меня есть это, но потом я получаю белый прямоугольник в центре моего фона.

screen = pygame.display.set_mode(1280, 512)

screen.blit(background, (0,0))

while True:   
    pygame.display.flip() #flip is same as update
    for event in pygame.event.get():
        if (event.type == pygame.KEYDOWN):        
            if event.key == pygame.K_SPACE:
                screen.blit(player, (x, y))
            if event.key == pygame.K_BACKSPACE:
                pygame.draw.rect(screen, [255,255,255], (x, y, 62,62))

Ответы на вопрос(2)

о нарисовать фон снова ...

if event.key == pygame.K_BACKSPACE:
   screen.blit(background, (0,0))

Или, если вы хотите, чтобы он был немного более эффективным, вы можете использовать метод blit для рисования только той части фона, которую покрывает изображение игрока. Вы можете сделать это так ...

screen.blit(background, (x, y), pygame.Rect(x, y, 62, 62))

Rect в третьем аргументе заставит блиц рисовать только 62x62 пикселя сечения «фона», расположенного в позиции x, y на изображении.

Конечно, это предполагает, что изображение игрока всегда находится внутри фона. Если изображение игрока только частично перекрывает фон, я не совсем уверен, что произойдет. Это, вероятно, вызовет исключение, или просто обернется на другую сторону изображения.

Действительно, первый вариант должен подойти, если это довольно маленький проект, но если по какой-то причине вы беспокоитесь о производительности, попробуйте второй вариант.

 rollorox20215 февр. 2012 г., 19:48
Если я выбрал первый вариант, он покрывает мои другие слои (другие изображения, которые я выбрасывал на экран). ТЕМ НЕ МЕНИЕ! Второй вариант работает как шарм, спасибо!

а на экран.

В вашем коде вы бы использовалиscreen.blit(background, (0,0))

Когда вы начнете комбинировать множество поверхностей, вы, вероятно, захотите, чтобы переменная или список переменных отслеживали состояние экрана.

Например.

Инициализировать фон

objectsonscreen = []
objectsonscreen.append(background)
screen.blit(background, (0,0))

Добавить Sprite

objectsonscreen.append(player)
screen.blit(player, (x, y))

Очистить спрайт

objectsonscreen = [background]
screen.blit(background, (0,0))

ВидетьВот для получения дополнительной информации о спрайтах в Pygame. Обратите внимание, что если ваш фон не является фоном изображения и является просто сплошным цветом, вы также можете использоватьscreen.fill([0, 0, 0]) вместо.

 Appleman123403 июл. 2014 г., 23:30
Смотрите статью в ВикипедииВот
 Ray03 июл. 2014 г., 14:28
Вы упомянули «добавить спрайт». Я видел, как это слово часто разбрасывалось. Но что это значит? Это просто что-то на переднем плане, и меньше, чем фон?

Ваш ответ на вопрос