Un documento llamado cosas fundamentales para el desarrollo de videojuegos

Hola a todos estoy creando un documento en google doc es online y se pueden dejar comentarios.
La idea es buscar el ejemplo del concepto y aplicarlo en cualquier engine…No se trata de un documento con la explicación de como usar un motor en particular,sino de un concepto general aplicado a cualquier game engine.
por lo visto hay herramientas que se repiten en todos los Game engine por eso se me ocurrió la idea de crear un documento donde se pueda ver en diferentes motores de videojuegos la misma funcionalidad resaltando ejemplos prácticos y la sintaxis o tutorial en español del game engine en particular…:dejo el documento que por ahora tiene 11 hojas…Si quieren dejar alguna sugerencia o comentario no duden en hacerlo en el mismo documento.

¡¡¡ Hola @kone9 !!! recién pude ponerme a ver en detalle el documento, ¡está espectacular!, es un gran avance y me parece que voy a poder aprender algunas ideas copadas de ahí. ¡Te investigaste todos los frameworks de juegos!

Aprovecho para contribuir algunas ideas que vi mientras repasaba el documento:

Aleatoriedad:

En pilas agregué algunas funciones para permitir esto más fácilmente. Hay una función nueva llamada azar que permite generar un número aleatorio dado un rango.

pilas.azar(desde, hasta)

Algo a mencionar es que esta función puede retornar valores que se incluyen en los extremos, por ejemplo si llamamos a pilas.azar(1, 3) podría retornar 1, 2, o 3.

Por cierto, hice un ejemplo mostrando cómo usar esta función en la versión nueva de pilas:

https://app.pilas-engine.com.ar/#/ejemplos/azar

Etiquetas o grupos para obtener parámetros de objetos

Todos los actores en pilas pueden tener una etiqueta para luego poder acceder a ellos desde otra parte del juego. Hay dos funciones principales para realizar esta búsqueda por etiquetas.

La función obtener_actor_por_etiqueta recorre todos los actores en busca del primer actor que tenga la etiqueta solicitada:

let actor = this.pilas.obtener_actor_por_etiqueta("moneda")

Luego, la función obtener_todos_los_actores_con_la_etiqueta hace algo similar, pero en lugar de retornar el primer actor con esa etiqueta retorna una lista con todos los actores que tengan la etiqueta.

Por ejemplo, en el ejemplo de aleatoriedad, cuando el usuario pulsa el botón “desordenar todos los actores” las monedas se mueven a una posición completamente distinta. Para eso usé la función obtener_todos_los_actores_con_la_etiqueta y luego apliqué la función map para darle a cada actor una posición nueva:

Buscar hijos

Por ahora los actores de pilas son lineales, no tienen estructura de arbol o padres/hijos. Es algo que me gustaría tener a futuro, pero es medio difícil de hacer ahora, lo trataré de hacer más adelante.

Buscar objetos o nodos hijos en una escen…

Aquí se podría usar la función pilas.obtener_actor_por_nombre(nombre) donde nombre tiene que ser un string con el nombre del actor en la escena, por ejemplo “caja” o “enemigo”.

Cambiar de escenas

Se me ocurren dos casos comunes de utilización, para cambiar a una escena usando su nombre se puede escribir:

pilas.cambiar_escena("escena2")

asumiendo que el título de la escena es “escena2”. Aquí tomo nota, aún no tenemos forma sencilla de llamar a las escenas de forma personalizada desde el editor, pero es algo para hacer en breve.

Otra cosa muy común es querer reiniciar la escena actual, en ese caso se puede escribir directamente:

pilas.reiniciar_escena();

Sistema de waypoint

Aún no tenemos una implementación de esto, voy a investigarlo porque me parece buenísimo y me gustaría que pilas lo incluya.

Instanciar objetos en la escena

Para crear actores en pilas se puede usar una forma muy parecida a la que teníamos en pilas 1. Se puede escribir pilas.actores. seguido del nombre del actor. Por ejemplo, la nave de pilas puede disparar lasers invocando a este código, la parte destacada en rojo es donde invoca la creación del actor:

Por cierto, el editor acá nos puede ayudar bastante por que lista todos los actores conocidos en pilas:

lo malo es que ese listado solo muestra los actores que trae pilas. Si el programador hiciera un personaje propio no aparecería ahí. Mmmmm… habría que buscar una forma de incorporar esos actores personalizados ahí, tal vez podemos imitar un poco lo que hace unity, que tiene ese concepto de “prefabs” no?. Lo voy a investigar.

Destruir objetos

Para eliminar actores en pilas primero tenemos que conseguir apuntar al actor con una variable y luego llamar al método eliminar(). Por ejemplo:

let nave = pilas.actores.nave();
nave.eliminar()

Enemigos persiguen a personajes

Esto también lo tendría que investigar, actualmente no tenemos nada que permita hacerlo fácil.

Colisiones, chocar con objetos en una escena y física

Las colisiones en pilas se logran usando figuras, cada actor tiene su propia figura y se muestra en el editor de propiedades. Ahí se puede seleccionar el tipo de figura (círculo o rectángulo por ahora) y cómo debe interactuar al contactar con otras figuras.

Luego, los eventos de reacción (al chocar por ejemplo) se tiene que programar desde el editor. Para que un actor reacciones a un choque con otro actor tiene que implementar la función cuando_comienza_una_colision. Por ejemplo, en el ejemplo de plataformas que incluye pilas hay un personaje que puede capturar monedas siempre y cuando colisione con ellas:

También hay otros dos métodos para poder programar una reacción cuando se mantiene la colisión y cuando termina, cuando_se_mantiene_una_colision y cuando_termina_una_colision.

Áreas y cuerpos para activar eventos

Aquí se pueden lograr cosas similares a las que están en el documento, pero algo más básicas, usando las mismas figuras de la sección anterior pero marcándolas como “sensores” con la casilla que aparece en el inspector de propiedades.

Destruir objetos al salir de la cámara

Aquí no tenemos algo en pilas que lo facilite, me imagino que podemos implementar una habilidad para lograr esto. Algo como “eliminar al salir de cámara”, pero actualmente no existe, estoy pensando en voz alta…

Punto de SPAWN para los objetos en la escena

En pilas no tenemos ese concepto, pero sí se pueden inicializar los actores y luego asignarles la posición x e y de forma fija (con un número) o de forma relativa. Por ejemplo, en el ejemplo de la nave de más arriba, los lasers se crean en la misma posición que la nave usando las lineas laser.x = this.x (donde this es la nave en este caso).


Me quedé pensando en algunas mejoras para incluir en el próximo sprint y repasando de nuevo el documento. Una vez más: ¡Espectacular tu trabajo @kone9!, ¡gracias por compartirlo con nosotros!

1 Like

Gracias a vos,perdón por la demora en contestar, ahora estoy haciendo tutoriales con JMONKEY ENGINE ya que es estable y cuanto más motores de juegos investigó más entiendo como funciona todo esto…Ese documento va a seguir creciendo…Con todo lo que dijiste hay un montonazo para documentar…Por parte de pilas voy a esperar hasta que sea estable…Te comento que la mayoría de la información sobre conceptos de videojuegos las APRENDO DE UNITY3D,ya que unity como es tan masivo hay mucha información,desde como resolver problemas, hasta conceptos de videojuegos que no se ven en ningun lado…

UNA COSA IMPORTANTE que podrías agregar a pilas engine es un buscador de archivos dentro del editor…Es importante tener acceso a los recursos de forma visual y en lo posible arrastrarlos a las propiedades como en unity3D o godot engine

Saludos

@kone9 investiga gdevelop 5,construct 2 y gamemaker,haber que te parecen.

Ok,gracias…actualmente estoy con JMONKEY ENGINE.saludos