from the docs:
"During its lifetime, the PixelArray locks the surface, thus you explicitly
have to delete it once its not used anymore and the surface should perform
operations in the same scope."

so the idea is to do something more like this:
   self.pixels = pygame.PixelArray( self.screen )  # locks screen
   draw()
   del self.pixels  # automatically unlocks screen
   self.screen.blit ( image, dest_rect )

or maybe more like this:
   # as long as nobody stores a reference to the pixelarray, this ties the
screen locking to the draw call
   draw(pygame.PixelArray( self.screen ))
   self.screen.blit ( image, dest_rect )

or possibly to use the pixel array in a more fine grained way within the
draw call

If there were ways to make it more clear that this is the behavior, or
something to do to help you write the code you want, than PixelArray can be
changed as needed


On Sat, Jun 7, 2008 at 9:12 AM, Jake b <[EMAIL PROTECTED]> wrote:

> I was able to get it working by manually unlocking. It just seemed weird
> design:
>
> # (1) before needing pixels
> init()
>    # ...
> draw()
>    self.screen.blit ( image, dest_rect )
>
> # (2) adding pixel refs; breaks blit down the line
> init()
>    self.pixels = pygame.PixelArray( self.screen )
> draw()
>    self.screen.blit ( image, dest_rect )
>
> # (3) which does an exception, but you can fix it:
> init()
>    self.pixels = pygame.PixelArray( self.screen )
>    self.screen.unlock()
> draw()
>    self.screen.blit ( image, dest_rect )
>
> --
> Jake
>

Reply via email to