Hi Jake!

Thanks for responding.

The background that I blit in is the same size as the display surface, so I 
really am clearing the screen. :-/ I can see this - when I complete a row, I 
redraw the screen and everything looks fine. Then a new sprite starts making 
its  way down the board (imagine tetris) and, as soon as it is over top of the 
highest point where a block had been (even though it isn't there because rows 
disappeared), that old block  "shows through".

As for the splitting the sprites, I considered that. The problem is that when a 
row is complete (just like in Tetris), a whole piece that fell wouldn't 
necessarily disappear, but only part of one. I guess I could separate each 
piece into multiple sprites, but that would involve dozens of sprites and I 
don't think that the tracking of it would be any better than what I have right 
now.

Michael




-----Original Message-----
From: "Jake b" [ninmonk...@gmail.com]
Date: 12/31/2008 23:12
To: pygame-users@seul.org
Subject: 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.phi...@bluetie.com> 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


Reply via email to