Cyberdemonk escribió:¿Como hago cuando son varios sprites ? como los bloques del Breakout.
Podria usar 2 listas, una para los rect de los bloques y otra para los rect de los bloque que no deberian aparecer.
Usando las listas con un bucle for que "pinta" los bloque ahi se solucionaria no?
Chico, te estas complicando mucho la existencia 

hay algo llamado "grupos" y hacen todo lo que quieres de forma simple 
http://www.losersjuegos.com.ar/traducciones/pygame/sprite/groupMira, modificando un poco tu código, como ejemplo:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#la linea anterior nos permite utilizar acentos en los comentarios...
import pygame
from pygame import *
SCREEN_ANCHO = 300
SCREEN_ALTO = 300
class bola (pygame.sprite.Sprite): # heredamos la clase sprite
     def __init__(self):
         pygame.sprite.Sprite.__init__(self)
         self.image = pygame.image.load("bola.png")
         #sprite tiene un atributo llamado "rect"
         #ese atributo es lo que permite muchas utildades
         #asi que hay que respetar su nombre
         self.rect = self.image.get_rect()
         self.rect.centerx = SCREEN_ANCHO / 2
         self.rect.centery = 50
         self.speed = [3 ,  3]
         
     def update(self):
         if self.rect.left < 0 or self.rect.right > SCREEN_ANCHO:
             self.speed[0] = -self.speed[0]
         if self.rect.top < 0 or self.rect.bottom > SCREEN_ALTO:
             self.speed[1] = -self.speed[1]
         self.rect.move_ip((self.speed[0], self.speed[1]))
     
class bola2(pygame.sprite.Sprite): # heredamos la clase sprite
     def __init__(self):
         pygame.sprite.Sprite.__init__(self)
         self.image = pygame.image.load("bola.png")
         # Aquí habías colocado self.rect_pelota2, recuerda
         # lo que te dije antes, no te preocupes por el nombre
         # al ser objetos diferentes sus atributos les son diferentes
         # ejemplo:
         #    tu tienes un atributo "nombre"
         #    yo tengo un atributo "nombre"
         #    pero mi nombre es diferente al tuyo 
         #    a demás
         #    mi nombre es MIO
         #    tu nombre es TUYO 
         
         self.rect = self.image.get_rect()
         self.rect.centerx = 20
         self.rect.centery = 70
         self.speed2 = [2 ,  2]
         
     def update(self):
         if self.rect.left < 0 or self.rect.right > SCREEN_ANCHO:
             self.speed2[0] = -self.speed2[0]
         if self.rect.top < 0 or self.rect.bottom > SCREEN_ALTO:
             self.speed2[1] = -self.speed2[1]
        
         self.rect.move_ip((self.speed2[0], self.speed2[1]))
    
    
def main ():
     pygame.init()
     pygame.display.set_caption("Prueba")
     screen = pygame.display.set_mode((SCREEN_ANCHO ,SCREEN_ALTO ))
     
     fondo = pygame.image.load("fondo.jpg")
     
     clock = pygame.time.Clock()
     
     run = True
     
     #aqui estamos bien, creamos una pelota...
     pelota1 = bola()
     pelota2 = bola2()
     
     #creamos grupos de sprites
     #los grupos nos permiten manejar muchos sprites
     #de forma simple
     grupo_pelota1 = pygame.sprite.Group(pelota1)
     grupo_pelota2 = pygame.sprite.Group(pelota2)
     
     rebotes = False
     
     while run:
         clock.tick(60)
         
         #esto es para una salida más "limpia"
         for event in pygame.event.get():
            if event.type == QUIT:
                run = False
         
         pelota1.update()
         pelota2.update()
         
         #Las lineas que siguen las puedes remplazar por colisiones "entre grupos"
         """
         if pelota1.rect.colliderect(pelota2.rect):
             pelota1.speed[1] = -pelota1.speed[1]
             pelota1.speed[0] = -pelota1.speed[0]
             rebotes = True
         """
         #como aquí muestro:
         #no explicare como funciona exactamente esta función, te lo dejo de tarea 
         if pygame.sprite.groupcollide(grupo_pelota1, grupo_pelota2, False, True):
             pelota1.speed[1] = -pelota1.speed[1]
             pelota1.speed[0] = -pelota1.speed[0]
         screen.blit(fondo ,  (0 ,  0))
         #screen.blit(pelota1.image,  pelota2.rect_pelota2)
         #esta linea de arriba es innecesaria utilizando bien a sprite...
         #el método draw dibuja TODOS los sprites contenidos en el grupo
         grupo_pelota1.draw(screen)
         grupo_pelota2.draw(screen)
         pygame.display.flip()
     
     #como decia, una salida mas limpia...
     pygame.quit()
main()
Ahora imagina un grupo de sprites llamado "bloques" y un grupo para "pelota". 
Si tienes dudas, pregunta 
