Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/pilas/control.py
diff options
context:
space:
mode:
Diffstat (limited to 'pilas/control.py')
-rw-r--r--pilas/control.py112
1 files changed, 112 insertions, 0 deletions
diff --git a/pilas/control.py b/pilas/control.py
new file mode 100644
index 0000000..d91fbfd
--- /dev/null
+++ b/pilas/control.py
@@ -0,0 +1,112 @@
+# -*- 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.simbolos import *
+import eventos
+
+__doc__ = """
+Módulo pilas.control
+====================
+
+"""
+
+class Control(object):
+ """Representa un control de teclado sencillo.
+
+ Este objeto permite acceder al estado del teclado usando
+ atributos.
+
+ Por ejemplo, con este objeto, para saber si el usuario
+ está pulsando el direccional hacia la izquierda de
+ puedes ejecutar::
+
+ if pilas.mundo.control.izquierda:
+ print 'Ha pulsado hacia la izquierda'
+
+ Es decir, si bien Control es una clase, no hace falta
+ instanciarla. Ya existe un objeto que se puede consultar
+ bajo el nombre ``pilas.mundo.control``.
+
+ Entonces, una vez que tienes la referencia para consultar, los
+ atributos que tiene este objeto control son::
+
+ izquierda
+ derecha
+ arriba
+ abajo
+ boton
+
+ Cada uno de estos atributos te pueden devolver True, o False, indicando
+ si el control está pulsado o no.
+
+ Ten en cuenta que este objeto también se puede imprimir usando
+ la sentencia ``print``. Esto es útil para ver el estado completo
+ del control de una sola vez:
+
+ >>> print pilas.mundo.control
+ <Control izquierda: False derecha: False arriba: False abajo: False boton: False>
+
+
+ Consultando controles desde un actor:
+
+ Una forma habitual de usar los controles, es consultarlos
+ directamente desde el codigo de un actor.
+
+ Para consultar los controles para cambiar la posicion horizontal de
+ un actor podrías implementar el método ``actualizar``::
+
+ class Patito(pilas.actores.Actor):
+
+ def __init__(self):
+ pilas.actores.Actor.__init__(self)
+ self.imagen = "patito.png"
+
+ def actualizar(self):
+ if pilas.mundo.control.izquierda:
+ self.x -= 5
+ self.espejado = True
+ elif pilas.mundo.control.derecha:
+ self.x += 5
+ self.espejado = False
+
+ .. image:: ../../pilas/data/patito.png
+ """
+
+ def __init__(self):
+ self.izquierda = False
+ self.derecha = False
+ self.arriba = False
+ self.abajo = False
+ self.boton = False
+
+ eventos.pulsa_tecla.conectar(self.cuando_pulsa_una_tecla)
+ eventos.suelta_tecla.conectar(self.cuando_suelta_una_tecla)
+
+ def cuando_pulsa_una_tecla(self, evento):
+ self.procesar_cambio_de_estado_en_la_tecla(evento.codigo, True)
+
+ def cuando_suelta_una_tecla(self, evento):
+ self.procesar_cambio_de_estado_en_la_tecla(evento.codigo, False)
+
+ def procesar_cambio_de_estado_en_la_tecla(self, codigo, estado):
+ mapa = {
+ IZQUIERDA: 'izquierda',
+ DERECHA: 'derecha',
+ ARRIBA: 'arriba',
+ ABAJO: 'abajo',
+ SELECCION: 'boton',
+ }
+
+ if mapa.has_key(codigo):
+ setattr(self, mapa[codigo], estado)
+
+ def __str__(self):
+ return "<Control izquierda: %s derecha: %s arriba: %s abajo: %s boton: %s>" %(
+ str(self.izquierda), str(self.derecha), str(self.arriba),
+ str(self.abajo), str(self.boton))