En tutoriales pasados creábamos demasiadas líneas de código en el mismo lugar para dibujar en la pantalla, cosa que nos confundía a la hora de hacer debug, para evitar confundirnos entre tantas líneas de código de dibujos y demás, separaremos el código de dibujo en funciones.
Para empezar el código del bucle principal debe quedar en una función main la cual quedaría de la siguiente forma.
1 def main(): 2 pygame.init() 3 dimensiones = [500, 600] 4 pantalla = pygame.display.set_mode(dimensiones) 5 pygame.display.set_caption("-------- Animación ------") 6 juego_terminado = False 7 reloj = pygame.time.Clock() 8 while juego_terminado is False: 9 for evento in pygame.event.get(): 10 if evento.type == pygame.QUIT: 11 juego_terminado = True 12 13 pantalla.fill(NEGRO) 14 pygame.display.flip() 15 reloj.tick(60) 16 pygame.quit() 17 18 19 if __name__ == "__main__": 20 main()
Ahora supongamos que queremos dibujar varios aliens, será más fácil si creamos una función llamada dibujaAlien() e invocarla el número de veces que necesitamos dibujar, la función que dibuja el alien quedaría de la siguiente forma
1 def dibujaAlien(pantalla, x, y): 2 pygame.draw.polygon(pantalla, CUERPO, [[x, y], [x + 10, y], 3 [x + 10, y + 10], [x + 20, y + 10], [x + 20, y + 20], 4 [x + 30, y + 20], [x + 30, y + 10], [x + 40, y + 10], 5 [x + 40, y], [x + 50, y], [x + 50, y + 10], [x + 40, y + 10], 6 [x + 40, y + 20], [x + 50, y + 20], [x + 50, y + 30], [x + 60, y + 30], 7 [x + 60, y + 40], [x + 70, y + 40], [x + 70, y + 80], 8 [x + 60, y + 80], [x + 60, y + 50], [x + 50, y + 50], [x + 50, y + 80], 9 [x + 30, y + 80], [x + 30, y + 70], [x + 40, y + 70], [x + 40, y + 60], 10 [x + 10, y + 60], [x + 10, y + 70], [x + 20, y + 70], [x + 20, y + 80], 11 [x, y + 80], [x, y + 50], [x - 10, y + 50], [x - 10, y + 80], 12 [x - 20, y + 80], [x - 20, y + 40], [x - 10, y + 40], [x - 10, y + 30], 13 [x, y + 30], [x, y + 20], [x + 10, y + 20], [x + 10, y + 10], 14 [x, y + 10]]) 15 pygame.draw.rect(pantalla, NEGRO, [x + 10, y + 30, 10, 10]) 16 pygame.draw.rect(pantalla, NEGRO, [x + 30, y + 30, 10, 10])
La sentencia que dibuja el cuerpo es muy grande y para ser visualizada de mejor forma se separó en varias líneas
A la hora de invocar esta función solo pasaríamos las coordenadas donde queremos que aparezca el dibujo, de la siguiente forma.
1 dibujaAlien(pantalla, 100, 100)
Movimiento horizontal
Si al dibujar una figura aumentamos en uno el valor de su coordenada en X, y este aumento se hace dentro del bucle principal, obtendremos que la figura se mueva de forma horizontal.
1 x += 2 2 pantalla.fill(NEGRO) 3 dibujaAlien(pantalla, x, y) 4 pygame.display.flip()
Dependiendo del valor del aumento hará ver que el movimiento es más rápido o lento.
Movimiento Vertical
Para hacer un movimiento de manera vertical debemos aumenta el valor de la coordenada Y, suponiendo que comenzamos en y = 10 y después aumentamos el valor de Y, el dibujo parecerá que baja, entonces para hacer un movimiento inverso deberíamos empezar en Y = 400 y decrementar el valor de Y.
Si el valor de x tambien se incrementa al mismo tiempo obtendremos que el dibujo se mueva en diagonal.
1 # Vertical hacia abajo 2 y += 2 3 pantalla.fill(NEGRO) 4 dibujaAlien(pantalla, x, y) 5 pygame.display.flip() 6 # Vertical hacia arriba 7 y -= 2 8 pantalla.fill(NEGRO) 9 dibujaAlien(pantalla, x, y) 10 pygame.display.flip() 11 # Diagonal 12 x += 2 13 y += 2 14 pantalla.fill(NEGRO) 15 dibujaAlien(pantalla, x, y) 16 pygame.display.flip()
Movimiento circular
Para hacer que las figuras se muevan de forma circular debemos hacer uso de razones trigonométricas para calcular el conjunto de puntos que dibujen una circunferencia.
Basado en coordenadas polares pueden usarse las siguientes formulas para pasar a coordenadas rectangulares o cartesianas.
El centro de la circunferencia es representado por el punto(a, b) y t el valor del ángulo dado en radianes.
La segunda figura muestra más a detalle los puntos que se utilizan para que el dibujo se mueva de forma circular, cada uno de los puntos rojos son el valor del ángulo t y son obtenidas sus coordenadas (x, y), el punto azul es el centro (a, b).
1 def xyCircunferencia(t, centro, radio): 2 x = radio * math.cos(t) + centro[0] 3 y = radio * math.sin(t) + centro[1] 4 return [round(x), round(y)]
Dentro del bucle principal
1 t += 10 2 if t >= 360: 3 t = 0 4 x, y = xyCircunferencia(math.radians(t), [200, 100], 90) 5 pantalla.fill(NEGRO) 6 dibujaAlien(pantalla, x, y) 7 pygame.display.flip()
Escena animada
A continuación se muestra una animación que usa cada uno de los movimientos anteriores.
Se invocó 4 veces la función dibujaAlien, los cuales se mueven juntos en circunferencia, se creó una función dibuja Nave. La nave se mueve horizontalmente de derecha a izquierda y de izquierda a derecha. También se dibuja un círculo relleno simulando un proyectil el cual se mueve verticalmente hacia arriba.
Ver otro ejemplo en Animación de cañón
Animación en acción
Código fuente
Ingeniero en Computación, entusiasta y asesor de programación, laboro como programador de sistemas web, aunque mi área favorita es la visión artificial.
En este post crearemos un componente que solo hay en android y que no esta disponible en la paleta de controles de Netbe...
Python es un lenguaje de programación interpretado, de programación multiparadigma, ya que soporta orientación a objeto...
Continuación del tutorial “Utiliza 2 bases de datos diferentes en una aplicación” La Interfaz frmSelected.ja...
Common Object Request Broker Architecture (CORBA) es un estándar que permite que diversos componentes de software escrit...
Google abre las puertas de Google Open Source un nuevo sitio web que une todos sus proyectos de “Código Abierto...
Una Vista (View) es una Tabla Virtual cuyo contenido está definido por una consulta (SELECT), al igual que una tabla rea...
Java ha ido evolucionando a pasos agigantados en los últimos años gracias al pedido de su comunidad global de programado...
pixilart no es solo una herramienta online sino una comunidad de diseñadores a quienes les encanta el arte hecha con...
Repl.it es un proyecto de tres jóvenes emprendedores (Amjad, Haya, Maso), es un compilador en linea el cual te permite p...
Song Maker es el nuevo experimento de Google Chrome Music Lab que permite al usuario crear música desde el navegador a t...