¿De qué se trata?
3°año - Prof.: Silvina Rodríguez
Escuela Técnica Nº 26 "Confederación Suiza"
Es una herramienta para construir videojuegos de manera sencilla y didáctica.
"Biblioteca de videojuegos"
"Motor de videojuegos"
Está orientado a jóvenes en sus primeros pasos programando...
-
Es Multiplataforma.
-
Cuenta con una gran colección de objetos prediseñados.
-
Tiene documentación en español.
-
Es Software LIBRE.
-
Se utiliza "PYTHON" (Lenguaje de programación interpretado, que hace hincapié en una sintaxis que favorezca a un código legible para el humano).
Escenario / Simulación
Intérprete / Código
Al tener el intérprete y el escenario a la vez, el proceso de desarrollo es más dinámico. Veo en tiempo real lo que escribo.
También podemos utilizar el modo EDITOR, donde tendremos una vista más detallada de lo que codifiquemos.
Para efectuar algún cambio en nuestro código tenemos los botones de PLAY, PAUSA y AVANZAR
import pilasengine
pilas = pilasengine.iniciar()
Código Inicial:
import pilasengine:
Python interpreta que tiene que traer/importar la librería pilas.
pilas = pilasengine.iniciar():
Prepara la ventana para usar pilas, el área visible, el escenario.
Pilas, trae objetos prediseñados, por ejemplo los ACTORES.
Para crear un actor, escribimos:
Para ver la lista de actores:
nombre = pilas.actores.NombreActor()
Ejemplo:
mono = pilas.actores.Mono()
dir(pilas.actores)
El motor de física seleccionado para pilas se llama Box2D, el mismo motor de física utilizado en el juego Angry Birds.
En los videojuegos 2D las imágenes suelen estar en formatos gráficos como png o jpg.
Para cargar nuestras imágenes a la biblioteca PILAS escribimos:
mi_imagen = pilas.imagenes.cargar("Ruta\mi_foto.png")
Y ahora debemos asignar la imagen que cargamos a un nuevo actor:
nuevo_actor = pilas.actores.Actor(imagen = mi_imagen)
Sino podemos primero crear al actor, y luego asignarle la imagen:
mi_imagen = pilas.imagenes.cargar("Ruta\mi_personaje.png") nuevo_actor = pilas.actores.Actor() nuevo_actor.imagen = mi_imagen
Cualquiera de las dos opciones produce el mismo resultado, el personaje “cambiará” de apariencia cuando se le asigne una nueva imagen.
Ejercicio:
Elegir una imagen para el nuevo personaje. Modificarla y cargarla en Pilas. Asignarla a un nuevo actor para manipularlo.
Para indicarle acciones y manipular a los actores
solo tenemos que utilizar su nombre y sentencias simples.
Al actor en escena podemos pedirle que
cambie de posición, de tamaño, que rote o se anime mediante unas
lineas de código como:
mono.x = 100 mono.x = -150 mono.y = 120 mono.y = -54
Posición:
Escala/Tamaño:
mono.escala = 3 mono.escala_x = 2 mono.escala_y = 5
Rotación:
mono.rotacion = 90 mono.rotacion = 360
(La inclinación se mide en grados)
(El tamaño por defecto es 1.
Toma valores intermedios. Ej.: 0.5)
(Posición vertical y horizontal)
Animación:
Cualquiera de las propiedades anteriores se puede convertir en una animación, escribiendo el valor númerico entre CORCHETES [ ]. De este modo creamos listas.
Python permite multiplicar listas, así que podríamos multiplicarlas para repetir la animación.
Incluso podríamos alterar la velocidad en segundos.
Que gire una vuelta entera: mono.rotacion = [360]
Que gire 5 veces: mono.rotacion = [360] * 5
Que se mueva en el eje horizontal X: mono.x = [200, -200, 0]
Que se mueva en el eje vertical Y: mono.y = [200, -200, 0]
Idem ant. velocidad en 10 segundos: mono.y = [200, -200, 0], 10
Que se agrande y vuelva a su tamaño original: mono.escala = [5, 1]
Que lo repita 3 veces: mono.escala = [5, 1] * 3
También en Pilas podemos crear GRUPOS de actores, para organizarlos por características para manipularlos al mismo tiempo, a todos por igual.
bombas = pilas.actores.Bomba() * 5
(Se crean 5 bombas en posiciones aleatorias)
Esta referencia es parecida a una lista de Python normal.
Así que podríamos contar cuantas bombas hay en la escena:
print "Hay", len(bombas), "bombas!!!"
print es la forma básica de salida por pantalla (imprimir por pantalla).
len() es un método que devuelve el valor numérico que corresponde a los elementos de una lista.
for: Un bucle for es un bucle que repite el bloque de instrucciones un número predeterminado de veces. El bloque de instrucciones que se repite se suele llamar cuerpo del bucle y cada repetición se suele llamar iteración.
Modelo:
También podríamos recorrer el grupo de actores para descubrir las coordenadas de cada uno.
>> for una_bomba in bombas: . print una_bomba.x, una_bomba.y
>> for variable in elemento_recorrible: . cuerpo del bucle
Crear GRUPOS de cero, sin actores para luego ir agregándolos:
1º. Creo el grupo:
mi_grupo = pilas.grupos.Grupo()
bomba = pilas.actores.Bomba()
pelota = pilas.actores.Pelota()
2º. Creo los actores:
3º. Agrego los actores a mi grupo:
mi_grupo.append(bomba)
mi_grupo.append(pelota)
Ejercicio:
Crea un grupo con por lo menos 4 actores distintos y mostrar por pantalla cuantos hay.
Grillas de imágenes
Un forma conveniente de almacenar las imágenes de tus personajes es usar una grilla.
Para cargar una grilla utilizamos del método imagenes "cargar_grilla", donde pasamos dos parámetros, 1.Imagen, 2.Cantidad de columnas que tenga la grilla.
actor = pilas.actores.Actor() grilla = pilas.imagenes.cargar_grilla("Ruta\angry.png",5) actor.imagen = grilla
Reproduciendo animaciones
grilla = pilas.imagenes.cargar_grilla("Ruta\angry.png", 5) pajaro = pilas.actores.Animacion(grilla, True, velocidad=1)
El actor Animacion, puede recibir cómo argumento la velocidad con la que tiene que reproducir la animación (medida en cuadros por segundo).
El segundo argumento indica que la animación tiene que ser cíclica (nunca termina). Si pusieramos False, se repite una vez y se elimina.
Tener una grilla de imagenes es una buena forma de comenzar a realizar animaciones. Si quieres tomar una grilla y mostrar una y otra vez sus cuadros podría usar el actor Animación.
El siguiente código genera un actor que mostrará uno a uno los cuadros de la grilla:
COLISIONES
Existe una colisión cuando dos o más actores entran en contacto, se tocan, se chocan.
Tener en cuenta a la hora programar colisiones en pilas:
- Pensar qué queremos que pase cuando ocurra la colisión.
- Escribir una función que de respuesta a la colisión.
- Decirle a pilas qué actores son colisionables entre sí.
Si pulsamos F9 habiendo hecho click en la escena, se activa el Modo de Colisión y aparece un círculo al rededor de cada actor.
Este representa al RADIO DE COLISIÓN de cada objeto. Delimita el área que será colisionable.
Modificando el radio de colisión:
actor.radio_de_colision = 30
Cualquier actor puede aprender HABILIDADES. Estas habilidades vienen ya cargadas en la librería pilas. Entonces también sirve para grupos. Para esto escribimos:
mono.aprender(pilas.habilidades.RebotarComoPelota)
Para ver la lista de HABILIDADES completa, escribimos:
dir(pilas.habilidades)
Ejemplo:
(La palabra clave "dir", se encuentra dentro Pilas y me permite ver todos los objetos de una lista).
>> def el_mono_come(mono, banana): . mono.sonreir() . banana.eliminar()
Ahora, definimos qué debe suceder cuando ocurra la colisión.
Creamos la función:
(ejemplo)
bananas = [banana]
pilas.colisiones.agregar(mono, bananas, el_mono_come)
Por último creamos la lista de actores y le decimos a pilas que asocie la función de la colisión, los actores colisionables y la escena:
deck
By Silvina Rodríguez
deck
Tutorial básico de Pilas-Engine para alumnos de 3º Año - Escuela Técnica Nº 26 "Confederación Suiza"
- 242