Pygame Стирание изображений на фоне - PullRequest
3 голосов
/ 15 февраля 2012

Вы кладете изображение на поверхность, чтобы использовать его в качестве фона. Затем вы нажимаете кнопку 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 ]

5 голосов
/ 15 февраля 2012

Здесь можно сделать две вещи. Вы можете пойти по простому маршруту и ​​просто нарисовать фон снова ...

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 пикселя 'background', расположенную в позиции x, y на изображении.

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

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

3 голосов
/ 15 февраля 2012

Обычно рабочий процесс блитов - это просто блики исходного фона на экран.

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

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

1008 * Е.Г. *

Инициализация фона

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]).

...