我正在制作一个带有滚动图的程序,我只需要移动屏幕的一部分即可。
如果我做这样的事情:
import pygame
screen = pygame.display.set_mode((300, 300))
sub = screen.subsurface((0,0,20,20))
screen.blit(sub, (30,40))
pygame.display.update()
它给出错误消息:pygame.error:在blit期间不能锁定表面
我认为这意味着孩子被锁定在其父表面或其他物体上,但是我还能怎么做呢?
答案 0 :(得分:1)
screen.subsurface
创建一个曲面,该曲面引用原始曲面。来自文档:
返回与新父对象共享像素的新Surface。
为避免不确定的行为,表面会被锁定。您必须先.copy
表面,然后才能.blit
将其返回到源:
sub = screen.subsurface((0,0,20,20)).copy()
screen.blit(sub, (30,40))
答案 1 :(得分:1)
请勿直接在屏幕表面上绘制。为游戏/ UI的每个部分创建一个Surface
,然后将每个部分显示在屏幕上。
import pygame
def main():
pygame.init()
screen = pygame.display.set_mode((640, 480))
# create two parts: a left part and a right part
left_screen = pygame.Surface((400, 480))
left_screen.fill((100, 0, 0))
right_screen = pygame.Surface((240, 480))
right_screen.fill((200, 200, 0))
x = 100
while True:
events = pygame.event.get()
for e in events:
if e.type == pygame.QUIT:
return
# don't draw to the screen surface directly
# draw stuff either on the left_screen or right_screen
x += 1
left_screen.fill(((x / 10) % 255, 0, 0))
# then just blit both parts to the screen surface
screen.blit(left_screen, (0, 0))
screen.blit(right_screen, (400, 0))
pygame.display.flip()
if __name__ == '__main__':
main()