Есть ли способ контролировать FPS в Pygame Zero? - PullRequest
0 голосов
/ 18 января 2019

Я работаю над простым проектом, использующим ноль Pygame, и до сих пор мне удавалось отобразить группу изображений для формирования очень простой анимации. Я сделал видео в формате .png со скоростью 60 кадров в секунду. Кажется, что Pygame zero отдает их немного быстрее, и мне было просто интересно, есть ли способ установить FPS на 60, чтобы все отображалось так, как я ожидал. У меня есть несколько звуковых файлов, которые я хотел бы синхронизировать с последовательностью изображений, поэтому было бы очень полезно, чтобы они воспроизводились с постоянным FPS.

Я также заметил, что звук продолжает зацикливаться после его воспроизведения, поэтому я попытался остановить его после воспроизведения, но звук обрывается в конце, потому что анимация заканчивается слишком рано.

Вот код, который у меня есть:

import pgzrun

WIDTH = 480
HEIGHT = 360

# boot1 graphics
boot1 = Actor('boot1_1')
boot1.frame = 1
boot1.active = True

# boot2 graphics
boot2 = Actor('boot2_1')
boot2.frame = 1
boot2.active = False

# overlay
overlay = Actor("overlay_a")


def update_boot1():
    if boot1.active:
        boot1.x = WIDTH/2 
        boot1.image = "boot1_{}".format(boot1.frame)
        boot1.frame += 1
    else:
        boot1.x = 1000
    if boot1.frame > 59:
        #boot1.frame = 1
        boot2.active = True
        update_boot2()
        boot1.active = False


def update_boot2():
    if boot2.active:
        boot2.x = WIDTH/2 
        sounds.boot1.play()
        boot2.image = "boot2_{}".format(boot2.frame)
        boot2.frame += 1
    else:
        boot2.x = 1000
    if boot2.frame > 233:
        boot2.frame = 233
        boot2.active = False
        sounds.boot1.stop()


def draw():
    screen.clear
    screen.fill((0, 75, 0))
    boot2.draw()
    boot1.draw()
    overlay.draw()

# running the animation
def update(dt):
    update_boot1()
    update_boot2()

pgzrun.go()

Я также не нашел способа «выгрузить» последовательности изображений или сделать их невидимыми, когда я закончу с ними, поэтому я просто отбрасываю их в сторону с помощью «.x = 1000».

1 Ответ

0 голосов
/ 18 января 2019

в вашем рабочем цикле, просто используйте: просто используйте clock.tick (60) # или любой другой fps, который вы хотите

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