【发布时间】:2020-08-31 11:45:29
【问题描述】:
所以我正在制作一个项目,其中需要在某个时间点将方程式渲染到屏幕上,而我做到了。但我遇到了一个问题,方程只呈现一毫秒然后消失。我将问题追溯到'screen.fill((102、178、255))。当这段代码在主循环中时,方程只呈现我所说的......一毫秒,如果那段代码在主循环之外,问题就解决了,但是当你有需要的精灵时会出现其他问题移动。那么有没有办法通过在主循环中添加'screen.fill((102,178,255))'来解决这个问题??
从代码中删除 eq_done 变量将不起作用,因为我只想渲染一个方程,如果你删除 eq_done 变量,随机方程将开始在 pygame 窗口上闪烁
谢谢!
import pygame
import random
pygame.init()
screen = pygame.display.set_mode((640, 480))
clock = pygame.time.Clock()
done = False
equations = ['2 + 2', '3 + 1', '4 + 4', '7 - 4']
font = pygame.font.SysFont("comicsansms", 72)
tks = pygame.time.get_ticks()
cloud1 = pygame.image.load('cloud.png')
cloud1_X, cloud1_Y = 100, 50
cloud1_Y_change = 0
def cloud1_display(x, y):
screen.blit(cloud1, (x, y))
def display_equation():
text = font.render(random.choice(list(equations)), True, (0, 128, 0))
screen.blit(text, (320 - text.get_width() // 2, 240 - text.get_height() // 2))
rocket_up = False
eq_done = False
while not done:
screen.fill((102, 178, 255))
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
tks = pygame.time.get_ticks()
if tks > 5000 and not eq_done:
display_equation()
eq_done = True # only render once
cloud1_display(cloud1_X, cloud1_Y)
pygame.display.update()
clock.tick(60)
【问题讨论】:
-
你需要每帧重绘整个屏幕
-
eq_done导致display_equation仅被调用一次。您想多次渲染equations吗?只需从您的代码中删除eq_done。 -
不,我只想渲染一次方程。我很确定 eq_done 可以防止函数被一遍又一遍地重复,并确保只呈现一个方程。
标签: python python-3.x function pygame 2d