Как нарисовать закрывающий вид в pygame - PullRequest
1 голос
/ 30 мая 2020

Я пытаюсь сделать простую игру, в которой при определенных условиях поле зрения персонажа (всегда в центре экрана) радиально уменьшается, пока оно полностью не закроется и игра не закончится. Идея состоит в том, чтобы закрыть поле зрения полупрозрачной маской вокруг поля зрения персонажа. Соответствующая часть кода с решением, которое я применяю, будет выглядеть так:

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 dr aws тонн унитарных кругов тикания по мере увеличения радиуса зрения, что бы объяснило мою проблему ... Если это так, я мог бы уменьшить радиус круга по мере увеличения тикания, и это было бы, по крайней мере, частично уменьшить проблему!

1 Ответ

1 голос
/ 30 мая 2020

Проблема с этим решением в том, что оно замедляет работу моей игры.

Используйте pygame.time.Clock() / tick() скорее чем pygame.time.delay().
tick() функция будет задерживать, чтобы игра продолжалась медленнее, чем заданные тики в секунду. Функция обеспечивает постоянную частоту кадров:

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

    # [...]

Более того, уменьшение, кажется, ускоряется, поскольку площадь круга уменьшается пропорционально квадрату радиуса. Это оптическая иллюзия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...