1
2
3
4
5
6
7
8
9 import pilas
10 from pilas.simbolos import *
11
12 __doc__ = """
13 Módulo pilas.control
14 ====================
15
16 """
17
19 """Representa un control de teclado sencillo.
20
21 Este objeto permite acceder al estado del teclado usando
22 atributos.
23
24 Por ejemplo, con este objeto, para saber si el usuario
25 está pulsando el direccional hacia la izquierda de
26 puedes ejecutar::
27
28 if pilas.escena_actual().control.izquierda:
29 print 'Ha pulsado hacia la izquierda'
30
31 Es decir, si bien Control es una clase, no hace falta
32 instanciarla. Ya existe un objeto que se puede consultar
33 bajo el nombre ``pilas.escena_actual().control``.
34
35 Entonces, una vez que tienes la referencia para consultar, los
36 atributos que tiene este objeto control son::
37
38 izquierda
39 derecha
40 arriba
41 abajo
42 boton
43
44 Cada uno de estos atributos te pueden devolver True, o False, indicando
45 si el control está pulsado o no.
46
47 Ten en cuenta que este objeto también se puede imprimir usando
48 la sentencia ``print``. Esto es útil para ver el estado completo
49 del control de una sola vez:
50
51 >>> print pilas.mundo.control
52 <Control izquierda: False derecha: False arriba: False abajo: False boton: False>
53
54 También tienes la posibilidad de crearte un control estableciendo las teclas
55 personalizadas.
56 Para ello debes crearte un diccionario con las claves izquierda, derecha,
57 arriba, abajo y boton.
58 Con las constantes de pilas.simbolos, puedes asignar una tecla a cada una
59 de las entradas del diccionario.
60
61
62 >>> teclas = {pilas.simbolos.a: 'izquierda',
63 pilas.simbolos.d: 'derecha',
64 pilas.simbolos.w: 'arriba',
65 pilas.simbolos.s: 'abajo',
66 pilas.simbolos.ESPACIO: 'boton'}
67
68 >>> mi_control = pilas.control.Control(pilas.escena_actual(), teclas)
69
70
71 Consultando controles desde un actor:
72
73 Una forma habitual de usar los controles, es consultarlos
74 directamente desde el codigo de un actor.
75
76 Para consultar los controles para cambiar la posicion horizontal de
77 un actor podrías implementar el método ``actualizar``::
78
79 class Patito(pilas.actores.Actor):
80
81 def __init__(self):
82 pilas.actores.Actor.__init__(self)
83 self.imagen = "patito.png"
84
85 def actualizar(self):
86 if pilas.escena_actual().control.izquierda:
87 self.x -= 5
88 self.espejado = True
89 elif pilas.escena_actual().control.derecha:
90 self.x += 5
91 self.espejado = False
92
93 .. image:: ../../pilas/data/patito.png
94 """
95
96 - def __init__(self, escena, mapa_teclado=None):
114
117
120
122 if self. mapa_teclado.has_key(codigo):
123 setattr(self, self. mapa_teclado[codigo], estado)
124
126 return "<Control izquierda: %s derecha: %s arriba: %s abajo: %s boton: %s>" %(
127 str(self.izquierda), str(self.derecha), str(self.arriba),
128 str(self.abajo), str(self.boton))
129
136