Python 使用pygame移动rectange时会一直闪烁

Python 使用pygame移动rectange时会一直闪烁,python,pygame,Python,Pygame,当我试着运行这段代码时,一切都很好,但是rectanges一直在闪烁。我尝试将flip更改为更新,并在代码中的不同位置添加或删除pygame.display.flip(),但似乎不起作用。 编辑:我也刚刚意识到,当我把其余的车注释掉,只运行第一辆车时,它运行得很好。问题从第二辆车开始。 谢谢您的帮助。不要在drive()方法中更新屏幕,而是在主循环结束时进行更新 另外,不要对创建的每个新对象使用重复代码,而是使用for循环 给你: import pygame import random bla

当我试着运行这段代码时,一切都很好,但是rectanges一直在闪烁。我尝试将flip更改为更新,并在代码中的不同位置添加或删除
pygame.display.flip()
,但似乎不起作用。 编辑:我也刚刚意识到,当我把其余的车注释掉,只运行第一辆车时,它运行得很好。问题从第二辆车开始。
谢谢您的帮助。

不要在
drive()
方法中更新屏幕,而是在主循环结束时进行更新

另外,不要对创建的每个新对象使用重复代码,而是使用for循环

给你:

import pygame
import random

black  = (0,0,0)
white = (255,255,255)
green = (0,255,0)
red = (255,0,0)

screen = pygame.display.set_mode((1200, 600))
title = pygame.display.set_caption("Speeding cars")
clock = pygame.time.Clock()
clock.tick(60)

class Car:
    def __init__(self, x, y, height, width):
        self.x = x
        self.y = y
        self.height = height
        self.width = width

    def drive(self, change):
        self.change = random.randint(1, 3)
        self.x += self.change
        pygame.draw.rect(screen, black, (self.x, self.y, self.height, self.width))
        pygame.display.flip()

car1 = Car(30, 100, 50, 15)
car2 = Car(30, 200, 50, 15)
car3 = Car(30, 300, 50, 15)
car4 = Car(30, 400, 50, 15)
car5 = Car(30, 500, 50, 15)

driving = True

while driving:

    screen.fill(white)

    car1.drive(0)
    car2.drive(0)
    car3.drive(0)
    car4.drive(0)
    car5.drive(0)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            quit()
        pygame.display.flip()

应该只有一个
flip()
/
update()
在绘制所有形状和
blit
所有图像之后执行。它将缓冲区
屏幕
发送到视频卡,视频卡将其显示在监视器上

如果您在每次
驾驶后使用
,则它只发送
屏幕
,以监控一辆车,然后它只发送
屏幕
,以监控第二辆车,以此类推

import pygame
import random

black  = (0,0,0)
white = (255,255,255)
green = (0,255,0)
red = (255,0,0)

screen = pygame.display.set_mode((1200, 600))
title = pygame.display.set_caption("Speeding cars")
clock = pygame.time.Clock()
clock.tick(60)

class Car:
    def __init__(self, x, y, height, width):
        self.x = x
        self.y = y
        self.height = height
        self.width = width

    def drive(self, change):
        self.change = random.randint(1, 1)
        self.x += self.change
        pygame.draw.rect(screen, black, (self.x, self.y, self.height, self.width))

cars = []
for i in range(1,6):
    cars.append(Car(30, 100*i, 50, 15)) 

driving = True

while driving:

    screen.fill(white)

    for car in cars:
        car.drive(0)

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

    pygame.display.update()

我只读标题,我会猜-您可以在许多地方使用
screen.fill()
pygame.display.flip()
。您应该只在一个位置使用它。您应该只在事件
之后的
驾驶时在
中使用
pygame.display.flip()
,而不是在事件
中使用它-您在最后一行有错误的缩进。不要使用它
drive()
import pygame
import random

black  = (0,0,0)
white = (255,255,255)
green = (0,255,0)
red = (255,0,0)

screen = pygame.display.set_mode((1200, 600))
title = pygame.display.set_caption("Speeding cars")
clock = pygame.time.Clock()
clock.tick(60)

class Car:
    def __init__(self, x, y, height, width):
        self.x = x
        self.y = y
        self.height = height
        self.width = width

    def drive(self, change):
        self.change = random.randint(1, 3)
        self.x += self.change
        pygame.draw.rect(screen, black, (self.x, self.y, self.height, self.width))
        # pygame.display.flip() # don't use it

car1 = Car(30, 100, 50, 15)
car2 = Car(30, 200, 50, 15)
car3 = Car(30, 300, 50, 15)
car4 = Car(30, 400, 50, 15)
car5 = Car(30, 500, 50, 15)

driving = True

while driving:

    screen.fill(white)

    car1.drive(0)
    car2.drive(0)
    car3.drive(0)
    car4.drive(0)
    car5.drive(0)

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

    pygame.display.flip() # after `for event`, not inside `for event`