Python 在pygame中,次表面的blit会导致次表面被锁定的错误

Python 在pygame中,次表面的blit会导致次表面被锁定的错误,python,pygame,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.bli

这里有一个简单的脚本来复制它

#!/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
()
()
回溯(最近一次呼叫最后一次):
文件“/blit_test.py”,第10行,在
屏幕对半。blit(屏幕对半,(0,0))
pygame.error:在blit期间不得锁定曲面

如您所见,带有锁的screenscreen\u half元组为空。如果我使用screen而不是screen\u half

则没有错误,可能是在blit期间发生锁定。 你把一个表面切割成它自己,这就是为什么你会出错


如果您想将屏幕的一半复制到另一半,您可以“.copy”次表面,然后blit它。

我也有类似的问题,pmoreli是正确的。我刚刚复制了创建新曲面的次表面,然后将其显示在屏幕上:

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

但blit在表面上起作用。它在子曲面上不起作用。无论如何,我发现出于我的目的,我应该使用screen_half.scroll()