【问题标题】:Slowing down PyGame sprite animation without lowering frame rate在不降低帧速率的情况下减慢 PyGame 精灵动画
【发布时间】:2015-04-18 21:40:27
【问题描述】:

我正在尝试学习 pygame 精灵动画。我试图按照教程进行操作,一切都很好。只有一个问题我想不通。

在下面的代码中,我试图运行一个简单正方形的精灵动画。 这是精灵: https://www.dropbox.com/s/xa39gb6m3k8085c/playersprites.png

我可以让它工作,但动画太快了。我希望它更平滑一点,以便可以看到褪色效果。我看到了一些使用 clock.tick 的解决方案,但我猜这会减慢整个游戏的速度。

如何让动画变慢,同时保持窗口的通常帧速率?

下面是我的代码:

lightblue=(0,174,255)
import pygame

pygame.init()
screen = pygame.display.set_mode((400, 300))
done = False
screen.fill(lightblue)
images=pygame.image.load('playersprites.png')
noi=16
current_image=0
while not done:
        for event in pygame.event.get():
                if event.type == pygame.QUIT:
                        done = True
                        pygame.quit()
                        quit()
        if(current_image>noi-1):
            current_image=0
        else:
            current_image+=1
        screen.blit(images,(50,100),(current_image*32,0,32,32))
        pygame.display.flip()

【问题讨论】:

  • 使用您在循环中添加的整数值并检查可分性。
  • 我的意思见here
  • @malik Brahimi,谢谢它的工作
  • @malik brahimi,你能解释一下你做了什么
  • 所以有一个整数用于在循环之前从零开始计数。然后我们只需使用模算术以固定间隔更新图像。

标签: python animation pygame sprite


【解决方案1】:

使用您在循环中添加的整数值并检查可分性。请参阅here 了解更多信息。

【讨论】:

    【解决方案2】:

    你可以利用时间

    所以你的精灵有 16 帧,假设它希望以每秒 10 帧的速度运行,而不管游戏的帧速率如何。

    你可以做一些类似的事情

    import time
    start_frame = time.time()
    noi = 16
    frames_per_second = 10
    

    然后在你的循环中放

    current_image = int((time.time() - start_frame) * frames_per_second % noi)
    

    time.time() 以秒为单位计数,后面有几个小数位。如果你省略 frames_per_second 那么只需在 noi 上使用模运算符(大概是“图像数量”),每过一秒,结果就会增加1 直到达到 16 并返回 0。

    当您将 start_frame 和当前时间 (time.time()) 之间的差值相乘时,您会强制“秒”过去 frames_per_second强>倍快。

    float 的结果强制转换为 int,将允许您将其用作索引。

    现在,如果游戏的帧速率发生波动,则无关紧要,因为精灵的帧速率与系统时钟相关联。精灵仍应以尽可能接近所选择的帧速率运行。

    【讨论】:

      【解决方案3】:

      Clock.tick() 是正确的解决方案。

      虽然您可能希望尽可能快地运行游戏代码,但您不希望 动画 以任意速度运行。动画总是“每秒帧数”,这个值应该是稳定的;否则它会看起来很难看或令人困惑。一个好的值是与显示器的刷新率相同(通常为 60 FPS)以避免tearing

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-20
        • 2016-04-26
        • 1970-01-01
        • 2013-10-08
        • 1970-01-01
        • 2018-05-21
        • 2017-06-21
        • 1970-01-01
        相关资源
        最近更新 更多