[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

Re: [pygame] Background ghosts



It looks like you never clear the screen. try something like:
def drawBoard():
   self.screen.fill( (128,128,128) )
   blit background to display
   for piece in fallenPieces:
        blit piece to display
  display.flip()

Why do you split sprites into two groups? ( stopped, and moving )

(Not sure if that will exactly integrate into how your code, is, but
this is what I mean):

class TetrisMain():
	def __init__(self):
		"""init pygame, surfaces, sprite groups"""
		self.screen = #pygame screen
		self.pieces_list = #sprite group filled with pieces
		
	def draw(self):
		"""clear, blit background, blit pieces, flip."""
		self.screen.fill((128,128,128))
		self.screen.blit( self.background, (0,0))
		self.pieces_list.draw(self.screen)
		pygame.display.flip()
		
	def loop(self):
		"""main loop"""
		self.pieces_list.update() # update using sprite group
		self.draw()

On Wed, Dec 31, 2008 at 8:47 PM, Michael Phipps
<michael.phipps@xxxxxxxxxxx> wrote:
> I am finishing up my first pygame; everything has been fun and easy except this:
>
> The game is a tetris-like game (with a twist). I have the falling piece as a sprite. The background is just a bitmap. The pieces that have already fallen, I blit into place. So I have something like (in pseudo code):
>
> def drawBoard():
>    blit background to display
>    for piece in fallenPieces:
>         blit piece to display
>   display.flip()
>
> while 1: # game loop
>    moveSprite()
>    if sprite.nextLocation == taken
>        fallenPieces.Append(sprite.asPiece())
>        sprite = None
>        removeSolidRows() # This removes fallen pieces that have formed complete rows
>        drawboard()
>
> The problem that I have is that as the sprite is falling, I can see rows that have been removed. I have confirmed that drawBoard() is doing the right thing - when the sprite hits the bottom and the screen redraws, the ghosts disappear. They are only there when the sprite floats over them. It looks like the sprite is getting the data from the old version of the screen (i.e. before the last piece fell and rows were removed) to redraw the screen's dirty regions.
>
> Help!
>
> Michael
>



-- 
Jake