如何在 pygame 中显示平滑的加载栏?

2 python pygame python-3.7

我目前在 pygame 上开发游戏。我想创建一个带有加载栏的加载窗口,就像软件 GIMP 一样,但我真的不知道如何优化它,...

这是我代码的一部分,显然它运行得不太好。你能帮助我吗?

...

screen = pygame.display.set_mode((640, 480), pygame.NOFRAME)
where = (120,360)
While in progress = true:
   If 1/a < 0.25
   screen.blit(Load0, where)
   If 1/a < 0.50
   screen.blit(Load1,where)
   #... ( it's the same for <0.75 and = 1 )
   pygame.display.update()
game()
Run Code Online (Sandbox Code Playgroud)

但这会让接力加载条变得很糟糕...你能帮我让它真正更优化、更流畅吗?
PS:我有 350 个元素要加载

Rab*_*d76 7

简化一下,用 2 个矩形画一个条形。

创建一个绘制条形的函数。该函数绘制一个细的外部矩形和填充的内部矩形。内部矩形的长度取决于进度。progress是 [0, 1] 范围内的值。如果为 0,则不绘制内部柱线。如果为 1,则内部条形完整:

def DrawBar(pos, size, borderC, barC, progress):

    pygame.draw.rect(screen, borderC, (*pos, *size), 1)
    innerPos  = (pos[0]+3, pos[1]+3)
    innerSize = ((size[0]-6) * progress, size[1]-6)
    pygame.draw.rect(screen, barC, (*innerPos, *innerSize))
Run Code Online (Sandbox Code Playgroud)

定义条形的位置和颜色参数:

barPos      = (120, 360)
barSize     = (200, 20)
borderColor = (0, 0, 0)
barColor    = (0, 128, 0)
Run Code Online (Sandbox Code Playgroud)

定义最大项目数:

max_a = 350
Run Code Online (Sandbox Code Playgroud)

当您绘制条形时,当前进度为a/max_a

DrawBar(barPos, barSize, borderColor, barColor, a/max_a)
Run Code Online (Sandbox Code Playgroud)