如何在pygame中绘制关闭视图



我正在尝试制作一个简单的游戏,在给定的情况下,角色的视野(始终位于屏幕中心(会径向缩小,直到它完全关闭并且游戏结束。这个想法是在角色的视野周围用半透明的蒙版覆盖视图。我应用的解决方案的代码的相关部分是:

pg.init()
pg.display.init()
screensize = (width,height)=(600,600)
c=(int(width/2),int(height/2))
screen = pg.display.set_mode(screensize)
surface = pg.Surface((600,600), pg.SRCALPHA)
visionradius=20
run=True
while run:
pg.time.delay(20)
for event in pg.event.get(): 
if event.type == pg.QUIT:
run=False
if CONDITION()==True:
visionradius+=1
else:
pass
pg.draw.circle(surface,(10,255,10,230),(c[0],c[1]),600,visionradius)
screen.blit(surface, (0,0))
if visionradius>599:
run = False
pg.display.update()
screen.fill((255,255,255))
pg.quit()

此解决方案的问题在于,随着半径的增加,它会使我的游戏运行缓慢。我将不胜感激任何关于半透明关闭视图的替代方法或防止游戏运行缓慢的想法。我想知道 pygame 是否随着视野半径的增加而绘制了大量的单一刻度圆圈,这可以解释我遇到的问题......如果是这样,我可以随着刻度的增加而减小圆的半径,这至少可以在一定程度上减少问题!

这个解决方案的问题在于它使我的游戏运行缓慢。

使用pygame.time.Clock()/tick()而不是pygame.time.delay().
tick()函数将延迟以保持游戏运行速度慢于每秒给定的刻度。该功能可确保恒定的帧速率:

clock = pg.time.Clock()
FPS = 50
run = True
while run:
clock.tick(FPS)
# [...]

此外,随着圆的面积随着半径的平方而减小,减小似乎加速。这是一种错觉。