首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python Pygame超级慢,增加了窗口大小

问Python Pygame超级慢,增加了窗口大小
EN

Stack Overflow用户
提问于 2019-05-21 10:57:02
回答 1查看 243关注 0票数 1

硬件: iMac,4.2 GB i7,40 GB DDR4内存,Radeon Pro 580 8192 MB

->奇怪的是,我在下面发布的更新代码在我的iMac上只有1.6FPS

我开始用pygame做一个游戏,结果变得非常慢。我发现,即使在没有显示任何内容的情况下,拥有更大的窗口也会显著降低fps。为了演示这一点,我创建了下面的简单程序。每次迭代,它都会略微增加窗口大小。

首先,游戏窗口(上面没有显示任何内容)在100x100像素下以大约150fps的速度运行。当它增加到1000x1000像素时,它的运行速度只有2fps。

我做错了什么?如果fps如此之低,我将不得不放弃制作我的游戏。谢谢你的帮助。

代码语言:javascript
复制
import pygame, time
pygame.init()

display_width = 100
display_height = 100
win = pygame.display.set_mode((display_width, display_height))
clock = pygame.time.Clock()

run = True
while run:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

    win.fill((0, 0, 0)) #fills over pre-existing elements

    pygame.display.update()
    clock.tick()
    print(clock.get_fps())
    display_width += 1
    display_height += 1
    win = pygame.display.set_mode((display_width, display_height))

print('QUIT')
pygame.quit()

更新:我被告知,每次迭代更新显示尺寸都会对性能造成不公平的测试。这就是为什么我更新了下面的代码。此代码将窗口大小初始化为2000x2000,并不断将其更新为空白屏幕。然而,这仍然只实现了6个FPS,甚至没有任何内容。为什么会这样呢?

代码语言:javascript
复制
import pygame, time
pygame.init()

display_width = 2000
display_height = 2000
win = pygame.display.set_mode((display_width, display_height))
clock = pygame.time.Clock()

run = True
while run:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

    win.fill((0, 0, 0)) #fills over pre-existing elements

    pygame.display.update()
    clock.tick()
    print(clock.get_fps())


print('QUIT')
pygame.quit()
EN

回答 1

Stack Overflow用户

发布于 2019-05-21 19:42:37

pygame.display.set_mode是一个相对昂贵的操作,您似乎在循环的每一次迭代中都要这样做。

您可以通过首先使用屏幕修改代码创建一个函数来修复它,因此...

代码语言:javascript
复制
def increase_screen():
    display_width += 1
    display_height += 1
    win = pygame.display.set_mode((display_width, display_height))

然后,您可以将其绑定到计时器,以仅在每秒左右执行一次:

代码语言:javascript
复制
# Somewhere earlier in the code
ticks = 0

# Somewhere later in the update part of the loop
ticks += 1

if ticks == 1000:
    increase_screen()
    ticks = 0

这应该会降低它的运行速度,从而解决滞后问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56230488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档