我怎样才能用 pygame.time.set_timer 停止无限循环
how can i stop the endless loop with pygame.time.set_timer
想要更频繁地更改屏幕颜色。它应该是某种闪烁。
这应该在按下按钮时发生。
但是程序死循环了。
import pygame
pygame.init()
screen = pygame.display.set_mode((500, 500))
timer = pygame.time.Clock()
WHITE = (255, 255, 255)
RED = (255, 0, 0)
bg_active_color = WHITE
screen.fill(WHITE)
CHANGE_COLOR = pygame.USEREVENT + 1
pygame.time.set_timer(CHANGE_COLOR, 500)
counter = 0
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
if event.type == CHANGE_COLOR:
counter += 1
if counter < 4:
if bg_active_color == RED:
screen.fill(RED)
bg_active_color = WHITE
elif bg_active_color == WHITE:
screen.fill(WHITE)
bg_active_color = RED
else:
pygame.time.set_timer(CHANGE_COLOR,0)
print("end")
if event.type == pygame.QUIT:
running = False
pygame.display.update()
timer.tick(30)
pygame.quit()
您不能嵌套事件。您必须在 if
-elif
-else
语句中测试事件类型。检查 LEFT 是否与 KEYDOWN
事件和 K_LEFT
键一起按下并启动计时器。不要在事件循环中调用 fill
。更改 bg_active_color
变量就足够了:
import pygame
pygame.init()
screen = pygame.display.set_mode((500, 500))
timer = pygame.time.Clock()
WHITE = (255, 255, 255)
RED = (255, 0, 0)
bg_active_color = WHITE
CHANGE_COLOR = pygame.USEREVENT + 1
counter = 0
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
pygame.time.set_timer(CHANGE_COLOR, 500)
counter = 0
elif event.type == CHANGE_COLOR:
if counter < 4:
if bg_active_color == RED:
bg_active_color = WHITE
elif bg_active_color == WHITE:
bg_active_color = RED
else:
pygame.time.set_timer(CHANGE_COLOR,0)
print("end")
counter += 1
screen.fill(bg_active_color)
pygame.display.update()
timer.tick(30)
pygame.quit()
想要更频繁地更改屏幕颜色。它应该是某种闪烁。 这应该在按下按钮时发生。 但是程序死循环了。
import pygame
pygame.init()
screen = pygame.display.set_mode((500, 500))
timer = pygame.time.Clock()
WHITE = (255, 255, 255)
RED = (255, 0, 0)
bg_active_color = WHITE
screen.fill(WHITE)
CHANGE_COLOR = pygame.USEREVENT + 1
pygame.time.set_timer(CHANGE_COLOR, 500)
counter = 0
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
if event.type == CHANGE_COLOR:
counter += 1
if counter < 4:
if bg_active_color == RED:
screen.fill(RED)
bg_active_color = WHITE
elif bg_active_color == WHITE:
screen.fill(WHITE)
bg_active_color = RED
else:
pygame.time.set_timer(CHANGE_COLOR,0)
print("end")
if event.type == pygame.QUIT:
running = False
pygame.display.update()
timer.tick(30)
pygame.quit()
您不能嵌套事件。您必须在 if
-elif
-else
语句中测试事件类型。检查 LEFT 是否与 KEYDOWN
事件和 K_LEFT
键一起按下并启动计时器。不要在事件循环中调用 fill
。更改 bg_active_color
变量就足够了:
import pygame
pygame.init()
screen = pygame.display.set_mode((500, 500))
timer = pygame.time.Clock()
WHITE = (255, 255, 255)
RED = (255, 0, 0)
bg_active_color = WHITE
CHANGE_COLOR = pygame.USEREVENT + 1
counter = 0
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
pygame.time.set_timer(CHANGE_COLOR, 500)
counter = 0
elif event.type == CHANGE_COLOR:
if counter < 4:
if bg_active_color == RED:
bg_active_color = WHITE
elif bg_active_color == WHITE:
bg_active_color = RED
else:
pygame.time.set_timer(CHANGE_COLOR,0)
print("end")
counter += 1
screen.fill(bg_active_color)
pygame.display.update()
timer.tick(30)
pygame.quit()