Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/pilas/actores/animacion.py
diff options
context:
space:
mode:
Diffstat (limited to 'pilas/actores/animacion.py')
-rw-r--r--pilas/actores/animacion.py60
1 files changed, 60 insertions, 0 deletions
diff --git a/pilas/actores/animacion.py b/pilas/actores/animacion.py
new file mode 100644
index 0000000..0eb34e4
--- /dev/null
+++ b/pilas/actores/animacion.py
@@ -0,0 +1,60 @@
+# -*- encoding: utf-8 -*-
+# Pilas engine - A video game framework.
+#
+# Copyright 2010 - Hugo Ruscitti
+# License: LGPLv3 (see http://www.gnu.org/licenses/lgpl.html)
+#
+# Website - http://www.pilas-engine.com.ar
+
+import pilas
+from pilas.actores import Animado
+import copy
+
+VELOCIDAD = 10
+
+
+class Animacion(Animado):
+ """Representa una animacion de una grilla de imagenes.
+
+ Este actor toma una grilla de cuadros de animacion
+ y los reproduce hasta que la animacion termina. Cuando
+ la animacion termina se elimina a si mismo.
+
+ El constructor tiene algunos parámetros de utilidad:
+
+ - El parámetro ``ciclica`` permite hacer animaciones infinitas, que se repiten siempre, por defecto vale ``False`` que significa que la animación terminará y no se repetirá.
+ - El parámetro ``velocidad`` tiene que ser un número que indicará la cantidad de cuadros por segundo que se tienen que mostrar en la animación.
+
+ Por ejemplo, para mostrar una explosión infinita podrías
+ escribir:
+
+ >>> grilla = pilas.imagenes.cargar_grilla("explosion.png", 7)
+ >>> animacion = pilas.actores.Animacion(grilla, ciclica=True, velocidad=1)
+
+ .. image:: images/actores/explosion.png
+ """
+
+ def __init__(self, grilla, ciclica=False, x=0, y=0, velocidad=VELOCIDAD):
+ Animado.__init__(self, grilla, x=x, y=y)
+ self.tick = 0
+ self.ciclica = ciclica
+ self.definir_velocidad_de_animacion(velocidad)
+
+ def definir_velocidad_de_animacion(self, velocidad_de_animacion):
+ self._velocidad_de_animacion = (1000.0 / 60) * velocidad_de_animacion
+
+ def obtener_velocidad_de_animacion(self):
+ return self._velocidad_de_animacion
+
+ velocidad_de_animacion = property(obtener_velocidad_de_animacion, definir_velocidad_de_animacion, doc="Es la cantidad de cuadros por segundo a mostrar")
+
+ def actualizar(self):
+ self.tick += self.velocidad_de_animacion
+
+ if self.tick > 1000.0:
+ self.tick -= 1000.0
+ ha_reiniciado = self.imagen.avanzar()
+
+ # Si la animacion ha terminado se elimina de la pantalla.
+ if ha_reiniciado and not self.ciclica:
+ self.eliminar()