Eso era lo que me hacia falta realmente, pero me surge un nuevo problema, que pasa, supongamos que en vez de un cofre, tenemos tres cofres y queremos que el primero se abra o cierre si apretamos space, y que los otros dos hagan los mismo si apretamos otras teclas respectivamente. Digo esto porque en mi juego tengo tres flores y la animacion no se pude ver en todas al mismo tiempo, sino en la flor donde el personeje le pase por encima, intente lograr esto pasandole a la funcion update del cofre el objeto de mi personaje, y el numero de la flor, para despues preguntar por la posicion de mi personaje y el numero de la flor valga la redundancia, pero no me pincha ningun invento.
import pygame
from pygame.sprite import Sprite
class Comedora(Sprite):
    def __init__(self,x,y):
        Sprite.__init__(self)
        self.cargar_imagenes()
        self.change_state(Cerrada(self))
        self.rect = self.cerrada.get_rect()
        self.rect.move_ip(x, y)
 
    def cargar_imagenes(self):
        self.cerrada = pygame.image.load('img/comedora_0.bmp')
        self.cerrada.set_colorkey((255, 255, 255))
        self.cerrada.convert_alpha()
        self.abriendo = pygame.image.load('img/comedora_1.bmp')
        self.abriendo.set_colorkey((255, 255, 255))
        self.abriendo.convert_alpha()
        self.abierta = pygame.image.load('img/comedora_2.bmp')
        self.abierta.set_colorkey((255, 255, 255))
        self.abierta.convert_alpha()
        self.frames=[self.cerrada,self.abriendo,self.abierta]
    def change_state(self, state):
        self.state = state
    def set_frame(self, index):
        self.image = self.frames[index]
  
    def update(self,zeek,n):
        if(zeek.rect.x==213 and zeek.rect.y==2 and n==1):
          self.state.update(zeek,n)
        elif(zeek.rect.x==35 and zeek.rect.y==37 and n==2):
          self.state.update(zeek,n)
        if(zeek.rect.x==426 and zeek.rect.y==108 and n==3):
          self.state.update(zeek,n)
   
class Cerrada:
    def __init__(self, comedora):
        self.comedora = comedora
        self.comedora.set_frame(0)
    def update(self,zeek,n):
         if(zeek.rect.x==213 and zeek.rect.y==2 and n==1):
          self.comedora.change_state(Abriendo(self.comedora))
         elif(zeek.rect.x==35 and zeek.rect.y==37 and n==2):
          self.comedora.change_state(Abriendo(self.comedora))
         elif(zeek.rect.x==426,zeek.rect.y==108,n==3):
          self.comedora.change_state(Abriendo(self.comedora))
- Código: Seleccionar todo
- class Abierta:
 
 def __init__(self, comedora):
 self.comedora = comedora
 
 def update(self,zeek,n):
 if(zeek.rect.x==213 and zeek.rect.y==2 and n==1):
 self.comedora.change_state(Cerrando(self.comedora))
 elif(zeek.rect.x==35 and zeek.rect.y==37 and n==2):
 self.comedora.change_state(Cerrando(self.comedora))
 elif(zeek.rect.x==426,zeek.rect.y==108,n==3):
 self.comedora.change_state(Cerrando(self.comedora))
 
 class Abriendo:
 
 def __init__(self, comedora):
 self.comedora = comedora
 self.frames = [2,3]
 self.delay = 0
 
 def update(self,zeek,n):
 self._update_animation()
 
 def _update_animation(self):
 self.delay -= 1
 if self.delay <= 0:
 self.delay = 20
 try:
 next_frame = self.frames.pop(0)
 print next_frame
 self.comedora.set_frame(next_frame -1)
 except:
 print "El cofre a terminado de abrirse."
 self.comedora.change_state(Abierta(self.comedora))
 
 class Cerrando:
 
 def __init__(self, comedora):
 print "Entrando en el estado:", self
 self.comedora = comedora
 #self.frames = [2, 3][::-1]
 self.frames = [3, 2]
 self.delay = 0
 
 def update(self,zeek,n):
 self._update_animation()
 
 def _update_animation(self):
 self.delay -= 1
 
 if self.delay <= 0:
 self.delay = 20
 try:
 next_frame = self.frames.pop(0)
 self.comedora.set_frame(next_frame -1)
 except:
 print "El cofre ya se ha cerrado."
 self.comedora.change_state(Cerrada(self.comedora))
En progama principal crearia mis flores comedoras
comedora1=Comedora(214,37)
comedora2=Comedora(34,72)
comedora3=Comedora(427,143)
En ciclo principal de juego tendria entonces que llamar a
comedora1.update(zeek,1)   
comedora2.update(zeek,2)   
comedora3.update(zeek,3) 
pero este invento no me pincha