这是一个重现
的最小脚本#!/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 ,则没有错误。
答案 0 :(得分:2)
我有类似的问题,pmoreli是对的。我只是复制了地下创建新表面而不是在显示器上进行blit:
screen_half = screen_half.copy()
screen_half.blit(screen_half, (0, 0))
答案 1 :(得分:1)
可能在blit期间发生锁定。 你将表面弄成了自己,这就是你得到错误的原因。
如果你想将屏幕的一半复制到另一半,你可以“。复制”地下,然后将其搞定。