Я пытался нарисовать прямоугольник в Pygame, но цвет мигает ... почему? - PullRequest
0 голосов
/ 24 ноября 2018

Итак, я снова пробую 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()

Спасибо всем:)

1 Ответ

0 голосов
/ 24 ноября 2018

Функция pygame.display.update (или, альтернативно, pygame.display.flip) должна вызываться только один раз за кадр (итерация цикла while) в конце раздела рисования кода.

Просто удалите первый вызов pygame.display.update(), и программа будет работать правильно.


Несколько замечаний по поводу кода: определите свои константы (цвета) и создайте экран внеЦикл while (это не связано с мерцанием, но нет смысла делать это в цикле while).Кроме того, лучше не использовать звездный импорт (только from 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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...