Mover la bola (1ª parte)¶
El siguiente paso es añadir un movimiento continuo de la bola. Vamos a crear un
método mover() en el juego, que sea invocado continuamente desde el método
bucle().
Como primer paso, vamos a hacer que la bola se mueva de arriba a abajo, rebotando en los bordes superior e inferior:
| 05MoverBola1.py | |
|---|---|
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 | |
En el bloque principal del programa, comenzamos por definir la velocidad de la bola, medida en número de pixels a desplazar en cada iteración del bucle:
velocidad_bola=4
Como es una variable global, será accesible desde cualquier punto del programa.
Al inicializar el juego, creamos una propiedad para controlar cuando está parado el juego:
self.en_juego=False
El juego se activa al pulsar la tecla Space
def gestionar_tecla(self,evento):
if evento.keysym=='Escape':
self.terminar = True
elif evento.keysym == 'space':
self.en_juego = True
Y en el bucle principal, movemos la bola solo si el juego está activo:
if self.en_juego:
self.bola.mover()
Para controlar el desplazamiento actual de la bola, creamos una propiedad al crear una nueva bola:
self.desplaz_y = -(velocidad_bola):
Siendo x,y las coordenadas de todo objeto, llamaremos desplaz_y al desplazamiento
vertical y desplaz_x al horizontal. Inicialmente, el vertical es negativo,
lo que hace que la bola comience desplazándose hacia arriba.
El método mover() es invocado continuamente. Consta de dos partes:
- Calcular desplazamientos
-
Desplazar la bola. En este primer paso, no la desplazaremos horizontalmente:
self.juego.lienzo.move(self.juego.id_bola, 0, self.desplaz_y)La bola guarda como propiedades:
- el desplazamiento vertical
self.desplaz_y - una referencia al juego. Este almacena una referencia al canvas, que
tiene un método
move(). Hay que pasarle la referencia al circulo dibujado, que está guardada como propiedad del juego.
- el desplazamiento vertical
La función abs(x) devuelve el valor absoluto de un número x, quitando
el signo. Aquí la usamos para controlar el signo de los desplazamientos.