在地下的pygame blit导致地下被锁定的错误

时间:2010-11-07 10:58:11

标签: python pygame

这是一个重现

的最小脚本
#!/usr/bin/env python
import pygame

screen = pygame.display.set_mode((640, 480))
screen.fill((255, 255, 255))
screen_half = screen.subsurface((0,0, 640/2.0, 480))

print screen.get_locks()
print screen_half.get_locks()
screen_half.blit(screen_half, (0, 0))

输出

()
()
Traceback (most recent call last):
  File "./blit_test.py", line 10, in <module>
    screen_half.blit(screen_half, (0, 0))
pygame.error: Surfaces must not be locked during blit

您可以看到带有屏幕 screen_half 锁定的元组为空。如果我使用屏幕而不是 screen_half ,则没有错误。

2 个答案:

答案 0 :(得分:2)

我有类似的问题,pmoreli是对的。我只是复制了地下创建新表面而不是在显示器上进行blit:

screen_half = screen_half.copy()
screen_half.blit(screen_half, (0, 0))

答案 1 :(得分:1)

可能在blit期间发生锁定。 你将表面弄成了自己,这就是你得到错误的原因。

如果你想将屏幕的一半复制到另一半,你可以“。复制”地下,然后将其搞定。