Pygame(Python)缩放变换

2024-10-01 15:41:40 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

这样我就可以保持文本的所有偏移量,等等,这也是非常慢的。在

以下是代码的重要部分:

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慢得多。在

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

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

提前谢谢!在


Tags: the端口文本程序内容屏幕displaywindow
3条回答

最简单的事情是不用

pygame.display.flip()

是使用

^{pr2}$

这并不是很大的区别,但它对我的游戏效果很好,尤其是当它使用大量图片的时候。在

您正在通过display.flip()更新一个巨大的屏幕。在SDL中(这是pygame的背后)这不是一个好主意(试着去掉所有的东西,把翻转放进去,看看它跑得有多快,它不应该快得多)。在

我没有办法衡量,但我想您的代码花费很长时间的原因是.flip()的问题。在

既然您只处理640x480中的数据,为什么要将其扩展到如此巨大的维度?试着把你的屏幕设置为640x480,然后看看它会有多快。我想应该快四五倍。在

您可以使用window as destination surface保存一个blit:

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

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

相关问题 更多 >

    热门问题