Godot #HO | Información General

Yerboth

#1050 vale justo eso es lo que hago con capas, pero entiendo que en top-down es más sencillo, una capa para el agua otra para la tierra y otra para las paredes configuro un terrain para cada una y se monta en un segundo

2 respuestas
Ridote

#1051 creo que él se refiere más a mezclar terrenos. Puedes hacer autotiles que reaccionan a otros autotiles de forma automática.

#1050 Yo en su día algo hice con eso y era un poco lioso pero creo recordar conseguir que funcionara, pero igual tienen que pulirlo un poco bastante sí.

1 respuesta
Mandarino

#1051 #1052 si, yo pongo layers diferentes cuando quiero aplicar diferencias en colisiones, lighting, material etc.. o tambien si quiero pintar un layer encima del otro. Para hacer transiciones de tierra->agua con su propio tile tienes los terrenos.

18 días después
Yerboth

Vengo a enseñaros una función que me está ayudando mil.
Algo que aprendí con Hook and Chill es que si hay algo de plataformeo, todo debería ir ajustado a una cuadrícula, en el juego el escenario estaba en un tileset pero el resto de elementos los colocaba a mano, esto hacía que las colisiones a veces no estuvieran bien puestas y te pudieras colar en sitios donde no deberías poder o que te quedes tan cerca del borde de la plataforma que con intentar girarte cayeras al agua:

https://ibb.co/JBWkf9G

En el proyecto que estoy haciendo ahora los elementos se crean durante la partida, así que tampoco me valía con incluirlos en el tileset, pero he encontrado esta función maravillosa de los vectores:

Snapped

Metiendo esto en el Ready() de los elementos:

position = position.snapped(Vector2.ONE * 16) 

Donde 16 es el tamaño de la cuadrícula, estoy usando un tileset de 16*16

Pasamos de esto:

A esto:

2 1 respuesta
carra

#1054 No entiendo muy bien esto. ¿Quiere decir que Godot no puede mezclar bien colisiones contra un tilemap y contra, por ejemplo, cajas alineadas con los ejes? Si es así, me parecería una debilidad muy grande siendo un motor que se considera orientado a 2D

2 respuestas
Ridote

#1055 las colisiones del tilemap y de objetos fuera del tilemap usan lo mismo, puedes mezclar lo que quieras y funcionan bien

2 respuestas
Yerboth

#1055 #1056 el problema no es de la colisión en sí. A un tilemap solo le puedes poner capas de colisión "físicas" así que siempre va a ser un body, para que los pinchos maten al player estoy comprobando que un body de la clase tilemap y con una máscara de colisión en concreto está entrando en la hurtbox.
Esto dependiendo de la velocidad que lleve el player a veces puede variar por dos o tres píxeles más arriba o más abajo, lo que provocaba el efecto del primer gif.

Aunque siempre lo calculase perfecto igualmente tampoco querría que se solaparan lateralmente así que la solución habría sido la misma.

1 respuesta
kidandcat

#1057 ¿Cual es el efecto del primer gif? A lo mejor no lo he entendido bien, pero pensaba que tu unico problema era que los cubos no estaban alineados a la cuadricula, por eso se cae el bicho por la esquina.

Edit: aah va, ahora caigo en que los cubos aparecen donde mueres. Para alinear algo a la cuadricula es tan fácil como usar posiciones en múltiplos del tamaño del tile. Puedes hacer algo como Math.round(cube.Position.X / gridCubeWidth) * gridCubeWidth, que es seguramente lo que hace el snapped.

Y aparte de eso, otra forma de solucionarlo por ejemplo es que cojas el tilecell más cercano a la posicion del player (hay una funcion para eso), y uses la posicion de ese tilecell para spamear el cubo. Soluciones hay mil.

1 respuesta
Yerboth

#1058 no están alineados con la esquina ni alineados verticalmente entre ellos. Si los dejaba así al correr por encima se iba atascando porque la colisión crea "escalones"

Luego a la hora de jugar el juego te premia a crear los menos elementos posibles con lo que rara vez vas a necesitar poner dos tan juntos pero si por lo que sea te caes o lo que sea y pasa quedaba horrible

Edit a tu edit: sí, también podría haber metido las cajas en el tileset y directamente intercambiar el tile en vez de colocarla encima (aunque para otros elementos que tengo esto no vale)
Pero buscando soluciones me topé con esto y viendo que me solucionó el problema con una línea de código me pareció mágico xD

1 1 respuesta
carra

#1056 Ah es que en el primer GIF me pareció que al caer en el pico de la caja la atravesabas y eso sería un bug del motor físico

1 respuesta
kidandcat

#1059 Lo de que se atasque el personaje con esquinas suele solucionarse poniendole una colisión ovalada, no cuadrada, de esa forma se desliza por las esquinas.

1 respuesta
Yerboth

#1060 no no, eso es porque el gif va a 4fps y se ve raro, esas colisiones van perfectas

#1061 sí de hecho eso lo hice mientras encontraba la solución a que se quedaran alineadas

1
Ridote

Por cierto alguno se pidió el peluche de edición limitada? xDDDD A mí me tiene que llegar, vaya sablada

Ridote

@Kalgator ya que estamos vamos a tiro fijo, kalgy dime que tú también te lo pediste y no fui yo el único anormal

Jastro

no soy tan fan de Godot como para comprarme el peluche

1 respuesta
Ridote

#1065 what? Soy un NPC No tengo Cerebro xD es coña, ya ya sé que no eres fan de Godot :´(

1 respuesta
Jastro

#1066 encima, soy subnormal crei que lo habias escrito en la taberna, por eso respondi fakme

1
neZbo

No entiendo qué estáis diciendo, tengo el script en marcha. Pero si estáis hablando de la salida de la 4.3 me interesa.

2 1 respuesta
Ridote

#1068 pero dinos qué trae la 4.3 para que sea tan interesante que yo sigo estancado en la 4.2

1 respuesta
neZbo

#1069 Era coña, la verdad que ando algo desconectado, creo recordar que venía el rework de los tilemaps ¿No? Y fijo que un montón de fixes, porque llevan la tira con ella.

1 respuesta
Ridote

#1070 veo fixes muy concretos la verdad, ya no creo que vayan a meter ningún cambio gordo, lo único lo que comentas de los tilesets

Yerboth

Hoy una consulta sobre como implementar una mecánica, que tengo una idea pero creo que es un poco chapuza xD

Contexto: en el juego cuando el player muere, depende de cómo haya muerto se genera un elemento para poder llegar mas lejos en el siguiente intento. Hasta ahora tengo las cajas cuando caes en los pinchos y una burbuja cuando te caes al agua que va subiendo y sobre la que puedes rebotar.

Ayer implementé las cuerdas, sin misterio ninguno, una línea vertical a la que puedes agarrarte y subir por ella.
Ahora toca que se generen con la muerte del player. La idea es que hay una araña que va disparando escupitajos de telaraña, cuando te impacta, desde el punto en el que has muerto sale una telaraña hacia arriba en forma de cuerda por la que puedes subir. La idea es que suba hasta que tope con el techo, que es una capa de colisión del Tilemap

Esta es la forma que había pensado:

Crear un "objeto invisible" que se genera en el punto en el que has muerto (centrado en la cuadrícula con lo que comenté en #1054). Este objeto tendrá un area2D con un collider de 16*16 para que detecte todo el tile en el que está, si NO detecta colisión con el Tilemap te pinta un trozo de cuerda, sube 16 píxeles y lo mismo, así hasta que detecte que está en una casilla con colisión y se destruya sin pintar más porque ya ha llegado al techo.

A falta de implementarlo en mi cabeza funciona perfectamente xD no sé si sería más sencillo tirar de raycast y una line2D para luego montar el collider en código o algo así, pero me parece más complicado y aunque llegará el momento, todavía no he tocado raycast en Godot y me da un poco de pereza :sweat_smile:

Se os ocurre alguna otra forma? AVISO: no estoy buscando optimización, quiero que funcione de la forma más sencilla posible xD

1 respuesta
Ridote

#1072 para mí la forma más sencilla sería tirar un raycast la verdad

1 respuesta
Yerboth

#1073 y luego como recorro el grid generando un objeto por cada tile vacío? es que un raycast lo veo util para una comprobación continua, al final me va a dar una posicion de impacto y voy a tener que ir comprobando tile a tile igualmente no?

1 respuesta
Ridote

#1074 cómo hiciste las cuerdas del gancho?

1 respuesta
Yerboth

#1075 el gancho es una escena que se lanza en línea recta hasta que choca, agarra algo o llega al límite, la cuerda es un componente 2DLine dentro de la escena del gancho que se va pintando cada frame desde el player al gancho

0 raycast vaya xD

1 respuesta
Ridote

#1076 y no puedes hacer algo similar pero sabiendo el tamaño y posición de la liana o lo que sea? lanzas el raycast desde el punto X hasta una distancia larga, choca en el punto Y y ya tienes donde poner la liana. La colisión la metes en función del ancho que tú quieras y listo

1 respuesta
kidandcat

Pero si la cuerda has dicho que va hacia arriba en linea recta, para que necesitas nada de los tiles? Tira el raycast arriba, y pinta la cuerda desde el punto original hasta el impacto del raycast

1 respuesta
Yerboth

#1078 #1077 estoy trasteando con Raycast y es como yo pensaba, está pensado para tener una detección contínua, como en mi caso lo que necesito es hacer un check, dejar la escena colocada y no volver a comprobarlo, no sé si es lo mejor. He probado a hacerlo solo en el ready pero no chuta, o lo pones en process o no detecta colisiones.

Voy a probar lo que había pensado y si consigo que funcione así se queda aunque sea un poco cutre xD

2 respuestas
Ridote

#1079 pero a ver, se te muere el personaje y chequeas donde poner la cuerda, no? pues cuando procesas el morir del personaje lanzas el raycast, le metes el inicio y el final a la cuerda y listo. No tienes por qué lanzar el raycast en el ready de ninguna escena. Pero vaya, hazlo como te funcione y listo