Resumen del Sprint #06

¡Hola!, les escribo para comentarles las mejoras que se implementaron recientemente en Pilas Engine 2

Los links para usar la versión online o descargar la versión nueva están aquí. Recuerden que aún estamos en una fase muy temprana del desarrollo:

Implementando habilidades

Una de las cosas que aún no habíamos recreado en pilas desde la versión 1 eran las habilidades. Las habilidades son comportamientos que podemos “enseñarle” a los actores para mejorarlos con mucha facilidad.

Un ejemplo de habilidad es la posibilidad de “arrastrar con el mouse” un actor por la pantalla. Imagina lo simple que resulta tomar un actor cualquiera, enseñarle esa habilidad con una linea de código y listo:

mi_actor.aprender("arrastrable")

Ahora bien, en esta versión de pilas lo hicimos un poco más interesante. Ahora incluso hicimos que estas habilidades se puedan enseñar a los actores directamente desde la interfaz así:

Ese nuevo selector de habilidades es bastante útil, porque lista todas las habilidades implementadas y hace más sencillo conocerlas y experimentar sin necesidad de leer el manual previamente para saber qué habilidades existen.

También se agregó un ejemplo para mostrar la forma tradicional de vincular habilidades usando código:

Añadimos un modo “oscuro” al editor y otros arreglos

Se modificó la apariencia general de la aplicación, investigué sobre cómo hacer interfaces de usuario basadas en temas usando css y tomé algunas ideas y consejos de http://topcoat.io/ para mejorar el aspecto visual de la aplicación por completo.

Aún hay cosas para corregir, como la de mejorar el aspecto de los iconos dependiendo del tema de colores y algunas cosas más. Pero en general creemos que el cambio es para mejor.

Ah, y por recomendación de @kone9 ver dejamos el modo “oscuro” seleccionado como principal al momento de abrir el editor:

Incluso mejoramos un poquito algunos aspectos generales de la interfaz, como los consejos que aparecen sobre estos elementos de la interfaz:

Creando entorno de pruebas

Cuando comencé a implementar Pilas 2 tenía claro que quería tener una forma de automatizar el lanzamiento de versiones nuevas y simplificar la publicación de pruebas. Este es un avance muy grande respecto de Pilas 1, donde cada versión requería hacer un montón de pasos manuales para generar binarios y ver que todo funcione bien (o darse cuenta de que no funcionaba bien).

En Pilas 2 tenemos una batería de tests super completa, cada vez que hago un tag sobre github se ejecuta un proceso en circle.ci que corre todos los tests y publica versiones automáticamente para todas las plataformas.

Más información acá:

Ahora bien, en este sprint se le dió “una vuelta de tuerca” más a esa automatización:

A partir de este momento, cada vez que hacemos un commit, por más sencillo que sea, se realiza una compilación de todo el código automáticamente en este dominio de pruebas:

Ese dominio va a tener lo “último” siempre, para quienes quieran probar la versión más actualizada tal y como se ve en las computadoras de los desarrolladores. Incluso esta versión tiene un enlace para ver los commits del repositorio y comparar qué cambios están en pleno curso de implementación:

Obviamente, esto no cambia el modelo de lanzamientos que teníamos hasta ahora. Quienes deseen esperar la publicación de nuevas versiones no van a tener necesidad de ingresar a ese dominio de pruebas.

Simplificando el acceso a los actores

Dediqué un poco de tiempo a mejorar el intérprete, en donde hacemos pruebas y exploramos lo que pueden hacer los actores en tiempo de ejecución.

Y cómo este intérprete es bastante útil cuando estamos dando un taller o charla, me pareció buena idea crear una variable llamada “actores” para poder acceder a las referencias de los actores en la escena con mayor facilidad.

Por ejemplo, con el código inicial de una escena que tiene 3 actores, si escribimos en el intérprete “actores.” van a aparecer los actores listados para comenzar a enviarles “ordenes”:

Haciendo que pilas se pueda usar como biblioteca

Se modificó el motor para que pilas se pueda usar de forma externa, desde un archivo .html tradicional sin necesidad de utilizar el editor.

Este cambio en sí no parece muy importante, pero nos dará algunas ventajas a futuro. Por ejemplo, con este campo podríamos imaginar en alguna forma de exportar el juego para jugarlo directamente sin necesitar el editor. Incluso, permitiría que pilas-engine 2 se pueda usar como biblioteca de soporte para otras aplicaciones (como los desafíos de pilas-bloques sin necesitar otras herramientas adicionales)

Les dejo un ejemplo de cómo se puede utilizar en: https://app.pilas-engine.com.ar/manual/pilas_como_biblioteca.html

O bien este ejemplo: https://app.pilas-engine.com.ar/ejemplo-minimo.html

Permitiendo cambiar la gravedad de la escena

Se agregaron controles para modificar la aceleración gravitatoria de la escena. Tanto desde el inspector de propiedades de la escena como desde el código:

También se añadieron dos ejemplos para mostrar cómo interactúa la gravedad de la escena si se cambian estos valores:

Planificadas para el próximo sprint

Para el siguiente sprint tengo algunas ideas en mente, pero me gustaría dar espacio a implementar ideas que me proponga la comunidad también!!

Entre las ideas que tengo previstas implementar están estas:

  • Crear un tipo de actor que permita crear botones.
  • Mejorar la funcionalidad “decir” del actor usando 9-slices.
  • Hacer configurable el tamaño del area de juego y la calidad, actualmente está en baja calidad que es más rápido.
  • Añadir funciones para cambiar de escena, reiniciar y algunos ejemplos para mostrarlo.
  • Añadir más habilidades.
  • Crear ejemplos de audio.
  • Agregar más accesos a propiedades físicas, como fricción y escala de gravedad.

Y si puedo ponerme a investigar, me gustaría sumar alguna tarea como hacer pruebas sobre mobile para visualizar los juegos creados en celulares o tablets.

Por cierto, si quieren seguir el día a día del proyecto pueden mirar las tareas en curso en estos links:

¡Saludos!

2 Likes

Hola hugo.

Voy a hacerte un par de sugerencias.Creo que vendria bien que añadieras a la interfaz de escenario que se pueda añadir la resolucion y los fps que cada uno quiera.

Otra cosa que no he visto y no se como lo vas a resolver,es el poder crear un escenario desde el editor de escenarios.Si se quiere crear un nivel con sus plataformas,decorado,enemigos etc…Como lo vas a hacer,se va a seguir haciendo desde mapeditor o desde la intefaz de pilas 2.

Porque por ejemplo,si se quiere crear el decorado y las plataformas,desde el mapeditor se puede pero si se quiere añadir los enemigos en ciertos sitios hay que hacerlo desde el editor de pilas y no veo que se pueda desplazar por el escenario para colocar los enemigos a lo largo de ese escenario.

Tambien se me ha ocurrido algo que no he visto en ningun engine y que se hecha bastante en falta.Seria el tener una serie de ayudas o habilidades que te ayuden en la creacion de juego de peleas y de velocidad.


Pienso que se deberia de añadir habilidades para ayudarte a diseñar tu personaje y tambien para dotar de cierta rutina de movimientos para tus enemigo y jefes finales,incluso el poder manejar la camara con soltura para seguir la accion de este tipo de juegos.

Para un juego de velocidad seria el poder darle un movimiento al escenario para que tenga ese efecto de ese tipo de juegos,tal vez se podria crear un actor que sirviera para dibujar carreteras con curvas y rectas y luego al colocarlo en el nivel tendria ese efecto seudo 3d de los juegos clasicos.

Hugo, Excelente! Hace tiempo, creo que en la version 1.2 me aleje de Pilas Engine, parece un buen momento para volver!! <3 Gracias Genio

Muy bueno estoy siguiendo el desarrollo de cerca y viendo todas las mejoras por AHORA PARA TERMINAR EL PONG que estoy haciendo con pilas 2 necesitaría usar una función random que al ingresar 2 valores(un rango) devuelva un valor en entre esos números…Como trate de meterme en el desarrollo de pilas2,pero me choque con una terrible pared,ya que no entiendo el 80% de las cosas estoy siguiendo mi camino de aprendizaje con unity y godot,sin embargo las bases son las mismas…Por si te interesa tener ejemplos de cosas que todos los motores tienen estoy escribiendo un texto en google DOC online donde podes dejar comentarios y sugerencias,si queres agregar la función correspondiente con pilas2 a los ejemplos que hay con godot y unity estaria buenisimo…Te paso el link,ahora voy a crear un post al respcto.

Otra sugerencia que veo fundamental en un Game engine es un panel para la edición de animaciones…Me imagino que es un gran trabajo hacerlo,en mi caso trate de hacerlo.pero no pude.XD…Te dejo la información de godot engine para que veas como funciona esta herramienta.
https://docs.godotengine.org/es/latest/getting_started/step_by_step/animations.html

tutorial con la explicación en godot engine.

Misma herramienta pero en unity.

Hola que tal,pues despues de mirar el documento que ha realizado Kone9 voy a sugerir un par de cosas que no he visto.

Lo primero es sobre la aleatoriedad,kone9 a comentado introducir una funcion random_range(0,0) para dos valores,pero tambien estaria bien otra funcion con mas valores.

Seria choose(0,0,0,0,0,0,0,0,0,0),esta funcion elegiria aleatoriamente un valor de los muchos que permita la funcion.

Otra cosa que tambien es muy util son los trigger o disparadores,seria crear una caja o poligono vacio cuadrado que serviria para que cuando un objeto entre dentro se dispare una accion.
Pongo video de esto para una explicacion mas detallada:

1 Like

Por cierto kone9,lo de los waypoint ya comente algo parecido hace un tiempo,te paso el enlace por si te apetece mirarlo.

1 Like

Ok,si voy a documentar las áreas de colisiones para activar eventos.Esa función random que comentas nose de donde la sacaste pero esta buena…Aunque no puedo ponerla en el documento sino es compatible con los motores.Cualquier cosa podes dejar un comentario en el mismo documento que he creado…gracias.

Aqui tienes informacion de donde puedes ver la funcion choose(),es de gamemaker un engine que uso de vez en cuando.
Pon en la pestaña index el nombre choose y se mostrara la documentacion sobre esta.
https://docs2.yoyogames.com/

1 Like

Otra sugerencia y esta, esta sacada de contruct 2.

Es una funcion para el manejo del tiempo,pongo ejemplo.

if(colisiona con objeto){
poner en rojo la nave
wait(5 segundos)
poner en verde la nave
wait(3 segundos)
destruir nave
wait(4 segundos)
texto de nave destruida
}

La funcion es simple y se suele usar en dentro de un condicional,se puede llamar asi:

  • “esperar(colocar segundos)”

Dejo documentacion del sitio de contruct 2.

Creo que se llaman corrutinas esas funciones del tiempo.