本文介绍了为什么PyGame动画在闪烁的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以我运行代码,它开始出现故障.我是 pygame 的新手.

So I run the code and it just starts glitching out. I am new to 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()

图像不是故障,因为我无法发布视频,但这是我的代码所做的

The image is not the glitching one as I was not able to post a video but it is what my code does

推荐答案

该问题是由多次调用 pygame.display.update().在应用程序循环结束时更新显示就足够了.多次调用 pygame.display.update()pygame.display.flip() 会导致闪烁.

The problem is caused by multiple calls to pygame.display.update(). An update of the display at the end of the application loop is sufficient. Multiple calls to pygame.display.update() or pygame.display.flip() cause flickering.

从您的代码中删除对 pygame.display.update() 的所有调用,但在应用程序循环结束时调用一次:

Remove all calls to pygame.display.update() from your code, but call it once at the end of the application loop:

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

    # [...]

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

如果您在 screen.fill() 之后更新显示,则显示将短暂显示为背景颜色.然后绘制播放器(blit)并显示播放器在背景顶部.

If you update the display after screen.fill(), the display will be shown filled with the background color for a short moment. Then the player is drawn (blit) and the display is shown with the player on top of the background.

这篇关于为什么PyGame动画在闪烁的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-31 10:06