Bueno, utilizando la misma imagen...
#!/usr/bin/env python
# -*- coding: utf-8 -*-
Alto=400
Ancho=600
from coat import *
from pygame import *
#una función que carga las imagenes 
def carga_imagen(name, alfa=False, rect=False, colorkey=None):
#crea una ruta a la carpeta de datos
#al escribirlo de esa forma, nos aseguramos
#de que pueda abrir en todos los S.O.
#donde este instalado python
fullname = os.path.join(name)
#comprobamos si existe la imagen
try:
image = pygame.image.load(fullname)
except pygame.error, message:
print 'No se puede cargar la imagen: ', fullname
raise SystemExit, message
#combierte la imagen para que pygame la pueda usar
image = image.convert()
#En este punto asignamos el colorkey
#es decir, un color de base al que se
#borrara dejando solo el canal alfa (transparencia)
if alfa:
colorkey = image.get_at((0, 0))
image.set_colorkey(colorkey, RLEACCEL)
if not(alfa) and colorkey != None:
image.set_colorkey(colorkey, RLEACCEL)
#devuelve la imagen y la recta de la imagen
if rect:
return (image, image.get_rect())
else:
return (image)
#este es parte de unas clases que he
# desarrollado para manejar los sprites mejor
#aun esta "verde", hay que añadir cosas... y mejor ducumentación
class AnimacionDeArchivo():
def __init__(self, Archivo, Tabla=None, Diccionario=None, Colorkey=None):
#De lo UNICO que se encarga esta función es de regresar
#las imagenes de animación y nada mas, lo de preguntar
#rects le compete a la clase del sprite
.
self.lista_frames = []
#si no hay un color de trasparencia especifico, lo carga con el color
#del pixel (0,0)
if Colorkey == None:
image = carga_imagen(Archivo, alfa=True, rect=False, colorkey=None)
else:
image = carga_imagen(Archivo, alfa=False, rect=False, colorkey=Colorkey)
if Diccionario != None and Tabla != None:
print "No se pueden usar los parametros'Tabla' y 'Diccionario' al mismo tiempo"
return False
#partimos la imagen en filas y columnas
if Tabla != None:
columnas, filas = Tabla
tile_w = image.get_width () / columnas
tile_h = image.get_height () / filas
for f in xrange (filas):
for c in xrange (columnas):
rect = c * tile_w , f * tile_h , tile_w, tile_h
self.lista_frames.append(image.subsurface(rect).copy ())
#o en las cordenadas que marque un diccionario...
if Diccionario != None:
for llave in Diccionario:
rect = Diccionario[Llave]
ima = image.subsurface(rect).copy ()
self.lista_frames.append(ima)
self._frame = 0
self.inicio = pygame.time.get_ticks()
self._delay = 1000/15
self.ultima_act = 0 #ultima
#función para redimencionar todas las imagenes del sprite
def redimencion(self, dimencion):
for i in range(len(self.lista_frames)):
frame_i = self.lista_frames[i]
frame = pygame.transform.scale(frame_i, dimencion)
self.lista_frames[i] = frame
#función para hacer todas las imagenes con una trasparencia
def set_alpha(self, alpha):
for i in range(len(self.lista_frames)):
frame_i = self.lista_frames[i]
frame_i.set_alpha(alpha)
self.lista_frames[i] = frame_i
#la funcion que hace la magia
def Frame_es(self, Lista_anima = [0], Reset = False, Frame_return = False):
if Reset:
self._frame = 0
if pygame.time.get_ticks() - self.ultima_act > self._delay:
self._frame += 1
if self._frame >= len(Lista_anima):
self._frame = 0
self.ultima_act = pygame.time.get_ticks()
if Frame_return:
return self.lista_frames[ Lista_anima[self._frame] ], self._frame
else:
return self.lista_frames[ Lista_anima[self._frame] ]
def Main():
pygame.init() #incializamos pygame
#creamos abajo, una pantalla de dimenciones Ancho Alto
pantalla=pygame.display.set_mode((Ancho,Alto))
#le ponemos un titulo
pygame.display.set_caption("Animando un sprite")
#Inicializo la clase anima
anima = AnimacionDeArchivo(Archivo="havoc_basic_spritesheet_by_mrshackra-d3bezye.png",
Tabla = (11,1))
anima.redimencion((50,100)) #la hago mas grande
continuar = True
while continuar:
for evento in pygame.event.get():
if evento.type==pygame.QUIT:
pygame.quit()
continuar=False
sys.exit()#creo que esto es redundante
pantalla.fill((250,250,250))#rellenamos la pantalla de blanco
#coloco la imagen en la mitad de pantalla
pantalla.blit(anima.Frame_es([10,9,8,7,6,5,4,3]), (Ancho/2,Alto/2))
pygame.display.flip()
Main()
Si tienes alguna duda, solo pregunta
