为什么这个pygame程序会冻结?

时间:2015-08-07 18:22:33

标签: python pygame

下面是一个使用pygame的程序,它会在值发生变化时更新直方图。

然而,在运行几秒钟后,程序会冻结。有人可以指出错误吗?

import random
import pygame

SCREEN_SIZE = SCREEN_WIDTH, SCREEN_HEIGHT = 800, 600
FRAME_RATE = 50
BACKGROUND_COLOR = pygame.Color("white")
BAR_COLOR = pygame.Color("Black")
BUCKET_CNT = 20

pygame.init()

screen = pygame.display.set_mode(SCREEN_SIZE)
screen.fill(BACKGROUND_COLOR)

buckets = BUCKET_CNT*[0]
bar_w = SCREEN_WIDTH / BUCKET_CNT

clock = pygame.time.Clock()
background = pygame.Surface(screen.get_size())
background.fill(BACKGROUND_COLOR)

while True:
    clock.tick(FRAME_RATE)
    random.seed()
    idx = random.randrange(BUCKET_CNT)
    buckets[idx] += 1

    # Create rectangles representing bars in the histogram.
    bars = [pygame.Rect(i*bar_w,
                        SCREEN_HEIGHT - buckets[i],
                        bar_w, buckets[i]) for i in range(BUCKET_CNT)]

    # Draw bars on the background
    [pygame.draw.rect(background, BAR_COLOR, b, 5) for b in bars]

    # Blit the background
    screen.blit(background, (0, 0))

    # Show "stuff" on the screen
    pygame.display.flip()

修改

这些是非常好的建议。我已经改变了我的代码使用它们,但代码仍然冻结。以下是代码现在的样子:

import random
import pygame

SCREEN_SIZE = SCREEN_WIDTH, SCREEN_HEIGHT = 800, 600
FRAME_RATE = 50
BACKGROUND_COLOR = pygame.Color("white")
BAR_COLOR = pygame.Color("Black")
BUCKET_CNT = 20
GROWTH_RATE = 10

pygame.init()

screen = pygame.display.set_mode(SCREEN_SIZE)
screen.fill(BACKGROUND_COLOR)

buckets = BUCKET_CNT*[0]
bar_w = SCREEN_WIDTH / BUCKET_CNT

clock = pygame.time.Clock()
background = pygame.Surface(screen.get_size())
background.fill(BACKGROUND_COLOR)

# Create rectangles representing bars in the histogram.
bars = [pygame.Rect(i*bar_w,
                    SCREEN_HEIGHT - buckets[i],
                    bar_w, buckets[i]) for i in range(BUCKET_CNT)]
random.seed()
while True:
    clock.tick(FRAME_RATE)
    idx = random.randrange(BUCKET_CNT)
    buckets[idx] += 1

    bars[idx].inflate_ip(0, GROWTH_RATE)

    # Draw bars on the background
    pygame.draw.rect(background, BAR_COLOR, bars[idx])

    # Blit the background
    screen.blit(background, (0, 0))

    # Show "stuff" on the screen
    pygame.display.flip()

1 个答案:

答案 0 :(得分:1)

我想为每个人的时间道歉。事实证明,代码没有问题。我的工作机器只是过载了各种各样的过程。它正在运行多线程测试和虚拟机(目前正在编译一个非常大的代码库)。这一切都解释了我的计划冻结的原因。感谢DJMcMayhem尝试代码。特别向Alex Van Leiw致敬。多亏了你,我今天学到了一些关于pygame的新知识。