Вопрос-Ответ

Why is the PyGame animation is flickering

Почему анимация PyGame мерцает

Итак, я запускаю код, и он просто начинает давать сбои. Я новичок в pygame.

Вот код:

import pygame

pygame.init()
# Screen (Pixels by Pixels (X and Y (X = right and left Y = up and down)))
screen = pygame.display.set_mode((1000, 1000))
running = True
# Title and Icon
pygame.display.set_caption("Space Invaders")
icon = pygame.image.load('Icon.png')
pygame.display.set_icon(icon)
# Player Icon/Image
playerimg = pygame.image.load('Player.png')
playerX = 370
playerY = 480

def player(x, y):
# Blit means Draw
screen.blit(playerimg, (x, y))


# Game loop (Put all code for pygame in this loop)
while running:
screen.fill((225, 0, 0))
pygame.display.update()

for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# if keystroke is pressed check whether is right or left
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
print("Left arrow is pressed")

if event.key == pygame.K_RIGHT:
print("Right key has been pressed")


if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
print("kEYSTROKE RELEASED")

# RGB (screen.fill) = red green blue

player(playerX, playerY)
pygame.display.update()

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

введите описание изображения здесь

Переведено автоматически
Ответ 1

Проблема вызвана несколькими вызовами pygame.display.update(). Достаточно обновить отображение в конце цикла приложения. Несколько вызовов pygame.display.update() или pygame.display.flip() вызывают мерцание.

Удалите все вызовы pygame.display.update() из вашего кода, но вызовите его один раз в конце цикла приложения:

while running:
screen.fill((225, 0, 0))
# pygame.display.update() <---- DELETE

# [...]

player(playerX, playerY)
pygame.display.update()

Если вы обновите отображение после screen.fill(), на короткое время дисплей будет заполнен фоновым цветом. Затем игрок рисуется (blit), и дисплей отображается с игроком поверх фона.

python pygame