Package pilas :: Module control
[hide private]
[frames] | no frames]

Source Code for Module pilas.control

  1  # -*- encoding: utf-8 -*- 
  2  # Pilas engine - A video game framework. 
  3  # 
  4  # Copyright 2010 - Hugo Ruscitti 
  5  # License: LGPLv3 (see http://www.gnu.org/licenses/lgpl.html) 
  6  # 
  7  # Website - http://www.pilas-engine.com.ar 
  8   
  9  import pilas 
 10  from pilas.simbolos import * 
 11   
 12  __doc__ = """ 
 13  Módulo pilas.control 
 14  ==================== 
 15   
 16  """ 
 17   
18 -class Control(object):
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):
97 self.izquierda = False 98 self.derecha = False 99 self.arriba = False 100 self.abajo = False 101 self.boton = False 102 103 escena.pulsa_tecla.conectar(self.cuando_pulsa_una_tecla) 104 escena.suelta_tecla.conectar(self.cuando_suelta_una_tecla) 105 106 if mapa_teclado == None: 107 self.mapa_teclado = {IZQUIERDA: 'izquierda', 108 DERECHA: 'derecha', 109 ARRIBA: 'arriba', 110 ABAJO: 'abajo', 111 ESPACIO: 'boton'} 112 else: 113 self.mapa_teclado = mapa_teclado
114
115 - def cuando_pulsa_una_tecla(self, evento):
117
118 - def cuando_suelta_una_tecla(self, evento):
120
121 - def procesar_cambio_de_estado_en_la_tecla(self, codigo, estado):
122 if self. mapa_teclado.has_key(codigo): 123 setattr(self, self. mapa_teclado[codigo], estado)
124
125 - def __str__(self):
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
130 - def limpiar(self):
131 self.izquierda = False 132 self.derecha = False 133 self.arriba = False 134 self.abajo = False 135 self.boton = False
136