2

我正在用 python 编写一个简单的程序,它通过串行端口接收数据并更新屏幕。

因为我希望这个程序在它运行的任何计算机上看起来都一样,而且它需要全屏,所以我想我想在一个640、480的小窗口中绘制所有内容,然后将其缩放到一个全屏窗口我更新框架的时间。

这使我可以将文本等的所有偏移量保持相同。事实证明这真的很慢。

以下是代码的重要部分:

window = pygame.display.set_mode((1920, 1080),pygame.FULLSCREEN)    
screenPrescaled=pygame.Surface((640,480))

clock=pygame.time.Clock()


while iterations<400:
#Blit all the stuff to the prescaled surface here
    screenPostscaled=pygame.transform.scale(screenPrescaled,(1920, 1080))
    window.blit(screenPostscaled,(0,0))
    pygame.display.flip() 
    iterations+=1
    clock.tick(40)

这比40fps.

屏幕上的所有内容都是文本或线条,没有加载任何图像。我怀疑我在做一些愚蠢的事情。

我知道我只能更新“脏矩形”,但我想知道我是否遗漏了一些更基本的东西。

提前致谢!

4

3 回答 3

3

您可以使用 window 作为目标表面来保存一个 blit :

pygame.transform.scale(screenPrescaled, (1920, 1080), window)

如果它仍然太慢,您应该使用更新矩形,您可以使用与缩放图像 1920/640 和 1080/480 相同的因子来缩放它们。

于 2012-07-05T17:50:31.530 回答
2

最简单的事情是代替使用

pygame.display.flip()

是使用

pygame.display.update()

差别不大,但在我的游戏中效果很好,尤其是当它使用大量图片时。

于 2012-11-26T01:15:05.420 回答
1

您正在更新一个巨大的屏幕display.flip()。在 SDL(这在 pygame 后面)中,这不是一个好主意(尝试删除所有的翻转,看看运行速度有多快,它不应该快得多)。

我没有办法测量,但我猜你的代码需要很长时间的原因是.flip().

既然你只处理 640x480 的数据,你为什么要把它放大到这么大的尺寸呢?尝试将您的屏幕设置为 640x480,然后看看它会有多快。我想它的运行速度应该快四五倍。

于 2012-07-05T17:30:36.400 回答