【问题标题】:Why is my equation rendering for a millisecond and disappearing [duplicate]为什么我的方程渲染了一毫秒然后消失了[重复]
【发布时间】: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


【解决方案1】:

您需要每帧重绘整个屏幕。

像画云一样画方程。

    if pygame.time.get_ticks() > 5000:
        display_equation()

【讨论】:

    【解决方案2】:

    如果你想渲染一段时间的方程,那么你必须删除eq_done,但你必须测试当前时间是否小于某个时间点。例如:

    while not done:
        # [...]
    
        tks = pygame.time.get_ticks()
        if 5000 < tks < 6000:
            display_equation()
    
        # [...]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-15
      • 1970-01-01
      • 2012-04-28
      • 1970-01-01
      • 2021-10-16
      • 1970-01-01
      • 1970-01-01
      • 2012-12-06
      相关资源
      最近更新 更多