Python Pyame超慢且窗口大小增加

时间:2019-05-21 02:57:02

标签: python python-3.x pygame pygame-clock

硬件:具有4.2GHz i7、40 GB DDR4 RAM和Radeon Pro 580 8192 MB的iMac

->奇怪的是,下面发布的我的更新代码在iMac上仅以1.6 FPS运行

我开始在pygame中制作一个变得异常缓慢的游戏。我发现,即使没有显示任何内容,使用较大的窗口也会显着降低fps。为了证明这一点,我在下面创建了一个简单的程序。每次迭代都会稍微增加窗口大小。

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

我在做什么错?如果fps这么低,我将不得不放弃制作游戏。感谢您的帮助。

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,甚至什么也没有。为什么会这样?

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()

1 个答案:

答案 0 :(得分:0)

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

您可以通过首先使用屏幕修改代码创建一个功能来对其进行修复,所以...

def increase_screen():
    display_width += 1
    display_height += 1
    win = pygame.display.set_mode((display_width, display_height))

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

# 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

那应该降低其运行速度,从而解决滞后问题。