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