Físicas Revolute Joint

GameMaker Studio developers

Físicas Revolute Joint

En este apartado de físicas os mostramos la característica Revolute Joint. Descubre como unir objetos dotados de atributos, estos pueden representar un engranaje, un motor de revolución o una simple junta rotativa que forma parte de un puente…

SoloStudio Tech Youtube Channel


1.0 – Creando un objeto físico

Antes de comenzar con las juntas, debes conocer las propiedades fisicas de nuestro objeto y como activar estas. Así que comencemos…

Lo primero que debemos hacer es entrar en el modo físicas, pulsando el botón virtual PHYSICS MODE situado en nuestro panel principal. A continuación pulsaremos sobre el botón virtual PHYSICS PROPS para desplegar los ajustes de física de nuestro objeto.

El objeto seleccionado no contiene físicas, deberemos agregar estos atributos pulsando sobre el botón virtual ADD PHYSICS.

Añadiendo propiedades físicas

A partir de este momento podemos ajustar los diferentes valores que componen un objeto físico, la lista de funcionalidades es la siguiente:

  • SHAPE TYPE: Asigna el tipo de colisión que tendrá nuestro objeto:
    • CHAIN: Crea una colisión basada en polígono que hayamos creado. Se llama de tipo cadena por que solamente genera unas lineas a partir de nuestros vectores, pero carente de masa. Es muy utilizado para terrenos estáticos, aunque más adelante veremos que este tipo de colisión puede servirnos de mucho. Si asignamos este tipo y no hemos creado ningún polígono para nuestro objeto, el editor genera una caja basada en el tamaño de la imagen.
    • CIRCLE: Crea una colisión esférica para nuestro objeto. Las imágenes que encajan con este tipo de colisión pueden perfectamente ser las ruedas de un coche, un engranaje, una pelota, etc…
    • POLYGON: Crea una colisión a partir de un polígono que hayamos creado. A diferencia del tipo CHAIN, este tipo contiene masa generada por los triángulos que componen su área. Igualmente si nuestro objeto no contiene ningún dato de vértices, se asignará una caja de colisión basada en su imagen.
  • DENSITY: Ajusta la densidad de nuestro objeto. Esto sirve para medir como actuarán las fuerzas aplicadas con este objeto. A mayor densidad, más peso y resistencia a fuerzas. Pero esto no quiere decir que su simulación se acelere, este valor afecta directamente en el comportamiento cuando interactua con el entorno.
  • RESTITUTION: La restitución afecta al comportamiento de nuestro objeto al colisionar con cualquier otro objeto físico. Define la elasticidad de la masa, como ejemplo podríamos poner la de una pelota cayendo. Cuanto mayor es este numero, mayor es la capacidad de rebote al caer en una superficie.
  • GROUP: Define a que grupo pertenece nuestro objeto físico para su interacción. Si el valor es de 0, nuestro objeto hará caso omiso a cualquier valor asignado en otros objetos, debiendo definir en un evento de colisión con quien puede interactuar. En cambio si el valor es cualquier otro numero, siempre que coincida con el valor de grupo de otro objeto, estos interactuan entre si. Cuando queramos interacción entre objetos que se encuentran en diferentes grupos o en grupos de valor negativo (-1), deberemos hacer uso del evento de colisión.
  • LINEAR DAMP: Este valor define la resistencia a las fuerzas. Cuanto mayor sea el valor, mayor resistencia obtendrá a las fuerzas que le rodea. Notaremos esta resistencia al caer de precipicios, a la cantidad de fuerza que debamos aplicar para mover un objeto e incluso al acelerar un motor rotativo…
  • ANGULAR DAMP: Este valor define la resistencia angular. Cuando un objeto rota, este tiende a frenar su rotación a causa de las fuerzas que componen nuestro mundo. Ajustando este valor definimos cuanta resistencia aplicamos a las rotaciones.
  • FRCITION: Este valor define la fricción que tendrá un objeto al estar en contacto con otra superficie. Si frenamos una rueda, nuestro coche no para de forma instantanea, puesto que se genera una friccion que hace derrapar la rueda. Aquí pasa lo mismo y si ajustamos un valor alto, nuestra objeto frenará en seco, mientras que uno bajo hace deslizar este.
  • AWAKE: Define si nuestro objeto estará activo al comenzar la simulación en nuestro mundo físico (valor 1/verdadero), o de lo contrario inactivo (0/falso), estando presente, pero exento de ser parte de la simulación hasta que otro objeto colisione con el.
  • IS SENSOR: Este valor booleano (1/0, verdadero/falso) determina si nuestro objeto es un sensor. De ser así, nuestro objeto físico esta presente en la simulación, pero no está afectado por las fuerzas que lo componen. No obstante, si se detectarán las colisiones con este, pudiendo usar este valor para crear un interruptor que ejecute código en el evento colisión de GameMaker Studio.
  • IS KINEMATIC: Este valor desactiva la interacción con otras fuerzas como la gravedad, pero permite mover nuestro objeto en el escenario. Como ejemplo, puede ser muy útil para crea una plataforma con una función definida, como un ascensor que no atiende a la gravedad.
  • FIXED ROTATION: Activando esta variable nuestro objeto queda bloqueado en en cuanto a movimientos rotativo se refiere, adquiriendo como valor fijo el angulo que hayamos insertado en nuestro editor.
  • JOINT TYPE: Desde aquí seleccionamos el tipo de junta que une dos objetos. Hablaremos de los tipos de junta en los siguientes artículos. Este tutorial se basa en la junta Revolute.
  • ACTIVE: Nuestro objeto quedará completamente anulado de la simulación hasta que no se decida lo contrario. No obstante, nuestro objeto sigue activo en el escenario, pudiendo acceder a el.
  • SHAPE SCALE: Este valor define la escala de nuestra forma de colisión, en este mismo tutorial y unos párrafos más abajo explicamos esta función. Será de gran utilidad para simular diferentes tipos de comportamientos en nuestros objetos, según la masa que estos tengan.
Ajustando las propiedades físicas

1.1 – Los distintos tipos de forma

Configuremos la forma de dos objetos para la simulación física. El de la izquierda tiene asignado un rectángulo como colisión, y como vemos en la imagen de abajo, al de la derecha le estamos asignado una forma esférica.

Creando diferentes formas

Si pulsamos PLAY en nuestro escenario podremos hacer pruebas de físicas. Si presionamos la tecla F6 de nuestro teclado, la herramienta nos dibuja con exactitud las colisiones y el tipo de colisión que tienen nuestros objetos. Aparte, también se nos muestra su centro de masa, acompañado por dos lineas que representan los ejes X (roja) e Y (azul).

Si nuestro objeto tiene una densidad de cero, si no es del tipo CHAIN como el terreno de abajo, su colisión se mostrará de color verde, informando así que no atiende a la gravedad ni a fuerzas.

Haciendo un test de simulación

Sabiendo esto, asignaremos una densidad de 1 a estos objetos…

Añadiendo densidad a nuestros objetos

Como vemos en la imagen de abajo, nuestros objetos con propiedades físicas cobran vida. Estos forman parte de la simulación e interacción con los presentes.

Prueba de simulación con diferentes formas

Si escalamos un objeto que contiene físicas, la colisión de este también será ajustada para adecuarse al nuevo tamaño del objeto en cuestión.

Escalando propiedades de forma

En la imagen de abajo pueden observar dichos objetos con la escala cambiada…

Haciendo pruebas con los objetos escalados

Si nuestro objeto contiene la creación de un polígono, al asignarle propiedades físicas, este tomará como referencia el polígono para crear la colisión. Pulsando en el botón virtual PHYSICS PROPS podemos ajustar si nuestro poligono será una cadena de vectores o en cambio este contendrá masa.

Creando un polígono

Si introducimos la opción “Polygon” en el valor SHAPE TYPE, nuestro objeto tendrá masa. Siendo posible su total interacción con el mundo.

Cabe destacar que si nuestro polígono es cóncavo, Darkspine seccionará nuestro polígono para hacerlo compatible con nuestro sistema de físicas.

Simulando un polígono con masa

En cambio, si introducimos la opción “Chain”, crearemos colisiones basado en sus vectores. Recordemos que este método es más eficiente y adecuado para objetos estáticos en nuestro mundo, ya que no contienen masa.

¿Podemos agregar masa a este tipo de colisión? Si, en el ejemplo de este articulo observaremos ese proceso.

Generando un polígono sin masa

1.2 – Creando una junta

Pasemos a crear un objeto que contenga la imagen de un patrón que representa un puente…

Seleccionando una textura

Configuramos un polígono abierto para este ejemplo, pulsaremos sobre EDGE TEXTURE y le asignaremos la imagen…

Asignando un patrón a un modelo

Centramos nuestro modelo con el centro de masa de nuestro objeto con las opciones de modificación de vértices (MODIFY VERTEX).

Modificando vectores

Duplicamos este objeto y seguidamente pasemos a configurar los parámetros de físicas para cada uno.

En el primer objeto simplemente añadiremos físicas sin tocar ningún parámetro, dándonos una densidad de 0 y siendo este estático en nuestro mundo.

Para el segundo objeto le daremos una densidad de 1 y asignaremos un tipo de junta como se muestra en la propia imagen. Haciendo click sobre el botón virtual JOINT TYPE cambiamos el tipo de junta que queremos insertar, en este caso una junta Revolute.

Asignando un tipo de junta

A partir de este momento podemos hacer uso de la configuración de junta, situado en nuestro panel principal y llamado SET JOINT.

Seleccionando el menú de juntas

DarkSpine nos invita a seleccionar que objeto forma parte de nuestra junta, sólo bastará con hacer CLICK IZQUIERDO sobre el primer objeto y ya habremos consolidado la unión (representado por una linea roja entre los dos objetos).

Asignando un destino de junta

Si volvemos a pulsar CLICK IZQUIERDO y mantenemos este pulsado, podemos nota que un punto azul persigue nuestro cursor. Este punto ajusta la posición de la junta relativa a nuestro mundo. En este caso lo hemos situado sobre la superficie izquierda de nuestro objeto para crear una junta que conecte con su compañero en la coordenada indicada.

Moviendo las coordenadas de nuestra junta

Ahora si pulsamos PLAY podemos arrancar la simulación y ver como el objeto con densidad asignada rota de forma relativa a la posición de la junta.

Haciendo un test de junta

1.3 – Duplicando una junta

Bien, ahora hemos decidido duplicar este objeto unas decenas de veces para crear una cadena de juntas entre ellos. Para ello hemos activado la malla pulsando en el botón virtual GRID de nuestro panel principal. Porque de este modo tendremos la precisión exacta para colocar nuestros objetos en la misma coordenada Y sin dificultad.

Duplicando y posicionando objetos

Cuando duplicamos una junta, esta tiene la información de la entidad a la que se conecta, por lo tanto, nuestras copias apuntan al primer objeto como referencia. Pero no es lo que queremos. Así que podemos pulsar el botón virtual SET JOINT TARGET para cambiar la segunda identidad, seleccionando el objeto que tenemos a nuestro lado izquierdo para identificarlo como parte de nuestra junta/unión.

Configurando el objeto a unir en cada junta

Este es nuestro primer resultado, un conjunto de objetos que tienen configurada su colisión como Chain, pero que a su vez a creado un bloque de masa por objeto. ¿Porque sucede esto? Bien, si un objeto contiene datos de una junta y este no contiene masa en la forma de colisión, DarkSpine crea unos bloque sensoriales, que no interactuan con nuestro jugador pero que si dan un valor de masa. Esto unido a las demás piezas forman la estructura de un puente.

Test de juntas

1.4 – Ajustes gráficos

En la imagen de abajo apreciamos que nuestro puente, pero tiene defectos, ya que cada objeto dibuja su imagen de forma independiente. Por lo tanto, cuando estos rotan se observan defectos gráficos que rompen la experiencia.

Prueba de físicas

En este caso hemos decidido que con la ayuda de lógica, asignando un objeto que contenga un simple script, podemos hacer que un objeto padre dibuje el contenido de sus hijos.

Creando una familia

A este objeto le hemos llamado OBJ_PHYSICS_BRIDGE y se encarga de unir todos los modelos y dibujarlos en tiempo real dependiendo de la posición de sus hijos.

Asignando lógica en el objeto padre

Ahora nuestro puente luce esplendido sin defectos gráficos y completamente interactivo para el jugador.

Prueba de dibujo

1.5 – Escalando la masa de una junta

Hemos hablado de esas cajas que se generan para dar masa, cuanto más grandes son estas, más pesado y solido será nuestro puente. Cuando queremos conseguir el comportamiento de una cama elástica, bien sea porque tenemos otro tipo de imagen, se nos permite configurar estas cajas de colisión ajustando el valor de SHAPE SCALE en el panel PHYSICS PROPS. En nuestro caso ajustamos la caja a 0.5, restando así un 50% de su masa.

Ajustando la masa de nuestra junta

Aquí se puede apreciar el resultado y la diferencia de tamaño con los demás bloques.

Probando la configuración de masa

hacemos lo propio con los demás objetos y hacemos un test. Para visualizar el comportamiento, es muy recomendable que vean el vídeo de cabecera.

Haciendo un test de elasticidad

1.6 – Duplicando una familia

Como no podía ser de otro modo, DarkSpine permite la duplicación de una familia que contenga juntas, y en este caso, la replica re-configura los ajustes para asignar a su nuevo compañero de unión. No tendremos que hacer nada más, así que para un nivel, no hará falta repetir un proceso de configuración para agregar varios puentes en un escenario.

Duplicando una familia

1.7 – Escalando una familia

Se nos permite escalara nuestra familia, todos los datos de esta se ajustarán de forma relativa a su nuevo tamaño.

Escalando una familia

Estos son los resultados de un puente duplicado y escalado…

Test de un puente escalado

1.8 – Rotando una familia

Del mismo modo se nos permite rotar de forma relativa al padre nuestra familia. Todos los ajustes de junta tendrán en cuenta esta transformación para reajustar sus juntas.

Rotando nuestra familia

En la imagen de abajo observamos porque esta herramienta nos será de gran utilidad.

Test de un puente rotado

Recomendaciones:

Os recomendamos encarecidamente que visualicen el vídeo situado en el comienzo de este articulo para tener una idea clara de este apartado.

Los vídeo tutoriales suministrados en el canal de Youtube admiten aportaciones de subtitulo de los usuarios. Esto quiere decir que cualquier usuario puede contribuir para agregar subtitulo con el editor y el nuevo programa de aportaciones de los suscriptores de Youtube.


Con todo lo aprendido ya hemos llegado al final de este tutorial! Iremos viendo en varios artículos todas las funcionalidades. Espero que hayáis disfrutado de la lectura. ¡Desde aquí les mandamos un gran saludo y nos vemos en el siguiente articulo!

También te puede interesar:

2 comentarios

  1. Matemáticamenteincorrecta dice:

    Mejor explicado imposible y encima en Español ,gracias James.

    • James dice:

      Te agradecemos el comentario y estamos muy emocionados! Intentamos que nuestra extensión sea global, y que cualquier persona en el mundo pueda usarla. Nos satisface que nos corrobores que los tutoriales tengan buena compresión lectora, ponemos mucho énfasis en ello. Puedes consultarnos cualquier duda desde los comentarios o en el foro especializado para DarkSpine.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.