我尝试在Pygame中绘制一个矩形,但颜色是闪烁的……为什么?

所以,我再次尝试Pygame(还是初学者),我试图绘制一个矩形,但颜色只是闪烁. (橙色表面上的绿松石)为什么会这样?

这是代码片段:

from pygame import *
from sys import *

while True:
    init()

    for events in event.get():
        if events.type == QUIT:
            quit()
            exit()

    SCREENWIDTH = 900
    SCREENHEIGHT = 600
    SCREENSIZE = [SCREENWIDTH, SCREENHEIGHT]
    SCREEN = display.set_mode(SCREENSIZE)
    bg_col = [255, 123, 67]
    s1_col = (0, 255, 188)
    SCREEN.fill(bg_col)
    display.update()
    draw.rect(SCREEN, s1_col,(50, 25, 550, 565), 1) #problem area?
    display.update()

感谢大家 :)

最佳答案 pygame.display.update(或者替代
pygame.display.flip)函数应该在代码的绘图部分结尾处每帧调用一次(while循环的迭代).

只需删除第一个pygame.display.update()调用,程序就能正常工作.

关于代码的一些注意事项:定义常量(颜色)并在while循环之外创建屏幕(这与闪烁无关,但在while循环中执行此操作毫无意义).另外,最好不要使用star imports(只有来自pygame.locals import *才可以,如果它是唯一的星形导入).并使用时钟来限制帧速率.

import sys

import pygame
from pygame.locals import *


pygame.init()
# Use uppercase for constants and lowercase for variables (see PEP 8).
SCREENWIDTH = 900
SCREENHEIGHT = 600
SCREENSIZE = [SCREENWIDTH, SCREENHEIGHT]
screen = pygame.display.set_mode(SCREENSIZE)
clock = pygame.time.Clock()  # A clock object to limit the frame rate.
BG_COL = [255, 123, 67]
S1_COL = (0, 255, 188)

while True:
    for events in pygame.event.get():
        if events.type == QUIT:
            pygame.quit()
            sys.exit()

    screen.fill(BG_COL)
    pygame.draw.rect(screen, S1_COL, (50, 25, 550, 565), 1)
    pygame.display.update()
    clock.tick(60)  # Limits the frame rate to 60 FPS.
点赞