如何在按下按钮时更新屏幕?
How to update screen in this on button push?
我在 Pygame 中得到了这个小程序。它运行的时间每 2 秒执行一次操作。我在我的代码中遗漏了这 2 秒内它到底在做什么。
现在,我可以在程序 运行 时按下 Enter 并计算按下 Enter 的时间。
我唯一的问题是,即使我使用 pygame.display.update(),字体也不会更新。它始终在屏幕上的同一位置显示数字。有人可以帮我吗?
import pygame
import time
pygame.init()
screen = pygame.display.set_mode((640, 480))
clock = pygame.time.Clock()
done = False
font = pygame.font.SysFont("comicsansms", 72)
start = time.time()
i=0
F = 0;
while not done:
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE:
done = True
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_RETURN:
F = F + 1
text4 = font.render(str(F), True, (128, 128, 0))
screen.blit(text4,
(460 - text4.get_width() // 1, 40 + i * 20 - text4.get_height() // 2))
pygame.display.update()
clock.tick(30)
passed_time = time.time() - start
clock.tick(30)
if passed_time > 2 and i < 5:
start = time.time()
i = i + 1
pygame.display.update()
pygame.display.flip()
clock.tick(30)
screen.fill((255, 255, 255))
screen.blit(text4,
(320 - text4.get_width() // 2, 240 - text4.get_height() // 2))
pygame.display.flip()
clock.tick(60)
在事件循环中绘制的文本在事件发生时只绘制一次,但立即被screen.fill((255, 255, 255))
覆盖。在主循环中绘制的所有内容都会在每一帧中连续绘制。
不要在主循环中做任何额外的 pygame.display.flip()
或 pygame.display.update()
。添加一个条件,根据主循环中的条件绘制文本。
例如条件可以是text4 != None
:
text4 = None
while not done:
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE:
done = True
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_RETURN:
F = F + 1
text4 = font.render(str(F), True, (128, 128, 0))
passed_time = time.time() - start
if passed_time > 2 and i < 5:
start = time.time()
i += 1
screen.fill((255, 255, 255))
if text4 != None:
screen.blit(text4,(460 - text4.get_width() // 1, 40 + i * 20 - text4.get_height() // 2))
# [...]
pygame.display.flip()
clock.tick(60)
从代码中删除所有 pygame.display.flip()
和 clock.tick()
,但在主循环结束时除外。但是使用条件和函数来选择性地绘制场景。
我在 Pygame 中得到了这个小程序。它运行的时间每 2 秒执行一次操作。我在我的代码中遗漏了这 2 秒内它到底在做什么。 现在,我可以在程序 运行 时按下 Enter 并计算按下 Enter 的时间。 我唯一的问题是,即使我使用 pygame.display.update(),字体也不会更新。它始终在屏幕上的同一位置显示数字。有人可以帮我吗?
import pygame
import time
pygame.init()
screen = pygame.display.set_mode((640, 480))
clock = pygame.time.Clock()
done = False
font = pygame.font.SysFont("comicsansms", 72)
start = time.time()
i=0
F = 0;
while not done:
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE:
done = True
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_RETURN:
F = F + 1
text4 = font.render(str(F), True, (128, 128, 0))
screen.blit(text4,
(460 - text4.get_width() // 1, 40 + i * 20 - text4.get_height() // 2))
pygame.display.update()
clock.tick(30)
passed_time = time.time() - start
clock.tick(30)
if passed_time > 2 and i < 5:
start = time.time()
i = i + 1
pygame.display.update()
pygame.display.flip()
clock.tick(30)
screen.fill((255, 255, 255))
screen.blit(text4,
(320 - text4.get_width() // 2, 240 - text4.get_height() // 2))
pygame.display.flip()
clock.tick(60)
在事件循环中绘制的文本在事件发生时只绘制一次,但立即被screen.fill((255, 255, 255))
覆盖。在主循环中绘制的所有内容都会在每一帧中连续绘制。
不要在主循环中做任何额外的 pygame.display.flip()
或 pygame.display.update()
。添加一个条件,根据主循环中的条件绘制文本。
例如条件可以是text4 != None
:
text4 = None
while not done:
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE:
done = True
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_RETURN:
F = F + 1
text4 = font.render(str(F), True, (128, 128, 0))
passed_time = time.time() - start
if passed_time > 2 and i < 5:
start = time.time()
i += 1
screen.fill((255, 255, 255))
if text4 != None:
screen.blit(text4,(460 - text4.get_width() // 1, 40 + i * 20 - text4.get_height() // 2))
# [...]
pygame.display.flip()
clock.tick(60)
从代码中删除所有 pygame.display.flip()
和 clock.tick()
,但在主循环结束时除外。但是使用条件和函数来选择性地绘制场景。