在pygame中blit子表面时因子表面锁定而导致错误
这里有一个简单的脚本,可以用来复现这个问题。
#!/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和screen_half的元组是空的。如果我用screen代替screen_half,就不会出现错误。
2 个回答
1
可能是在进行图像复制的时候出现了锁定问题。你正在把一个图像区域复制到它自己上面,这就是你遇到错误的原因。
如果你想把屏幕的一半复制到另一半,可以先用“.copy”命令复制那个区域,然后再进行图像复制。
3
我之前也遇到过类似的问题,pmoreli说得对。我只是复制了一个子表面,创建了一个新的表面,然后把它显示出来:
screen_half = screen_half.copy()
screen_half.blit(screen_half, (0, 0))