1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
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))
|