2010-11-07 2 views
4

Voici un script minimal pour reproduire ceEn pygame blit d'erreur de la cause du sous-sol que le sous-sol est verrouillé

#!/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)) 

la sortie est

() 
() 
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 

Comme vous pouvez le voir tuples avec des serrures pour écran et screen_half sont vides. Il n'y a pas d'erreur si j'utilise écran au lieu de screen_half.

Répondre

1

Il est probable que le verrouillage se produise pendant le blit. Vous mélangez une surface en elle-même, c'est pourquoi vous obtenez l'erreur.

Si vous voulez copier la moitié de l'écran dans l'autre moitié, vous pouvez "copier" le sous-sol, puis le masquer.

+0

Mais le blit fonctionne en surface. Cela ne fonctionne pas sur les sous-surfaces. Quoi qu'il en soit, j'ai trouvé que pour mes fins, je devrais utiliser screen_half.scroll() – kepkin

1

J'ai eu un problème similaire et pmoreli a raison. Je viens juste de copier la surface en créant une nouvelle surface et de la noircir sur l'affichage:

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