pilas-engine

Objetos sólidos sin física?

Hola. Estaba probando hacer algo después de escribir en respuesta a otro tema y me surgió esta duda que abro como nuevo:
¿Cómo hacer que las paredes sean sólidas?
Probé hacer una pared del lado izquierdo que actuara como puerta para llevar a otra escena y todo bien, activé un rectángulo en forma física y tanto a mi actor principal como a mi pared les puse dinámica. El problema está en que al hacer lo mismo en otra escena diferente la pared se cae como si tuviera física. Pasa lo mismo a veces cuando pongo un objeto en dinámica activada pero si no lo pongo no interactúa. De ahí surgió mi propuesta de hacer la característica de “Sólido” :slight_smile: Saludos.

@GDPH No entendí a qué te refieres con sólido.
Si dices de cómo hacer que las paredes no se vean afectadas por la gravedad, pero que no se las pueda atravesar es simple. Le creas una figura de colisión y desmarcas las opciones de Dinámica y ¿Es sensor?.
La propiedad dinámica hace que una actor se vea afectado por la gravedad y que otros actores puedan empujarlo y sin esta propiedad, el actor, se vuele inamovible. Mientras que la propiedad ¿es sensor? permite que el actor atraviese y sea atravesado por otros actores sin que haya empuje, pero sí colisión.
Respecto de cómo detectar las colisiones teniendo o no teniendo activadas estas propiedades. Al usar las recetas (arriba a la derecha en el editor de código) para las colisiones te dicen lo siguiente:

  // Se invoca si entran en contacto dos actores con figuras dinámicas
  // o uno con figura dinámica y otro con figura no dinámica.
  cuando_comienza_una_colision(otro_actor: Actor)

  // Se invoca cuando colisiona con un sensor. Si lo que buscas es hacer
  // que la colisión sea entre figuras no sensores usá la función
  // "cuando_comienza_una_colision".
  cuando_colisiona(actor: Actor)

Yo también me confundía con estas cosas, pues el manual no explica estas propiedades. Respecto de las otras dos funciones que se pueden usar para manejar colisiones, nunca las he necesitado así que no tengo idea de como se usan.
No se si te refería a esto, espero haberte ayudado.

Hola. Sigo en este hilo porque no ha cambiado la duda. Creí ya haberlo resuelto peor no. La cosa es así, si pongo una pared y un actor que colisione con esta, sólo interactúan si marco la casilla “dinámica” en la pared, pero al hacerlo se ve afectada por la gravedad. en cambio si no la marco, la pared está estática pero el personaje no colisiona y la atraviesa.
Hice una prueba en otro archivo y la pared se va cayendo cuando ejecuta, cosa que no hacía en otro archivo. ¿Qué puede estar sucediendo acá?

Hola @GDPH !!!, no había entendido muy bien tu pregunta la otra vez, ahora creo que sí me quedó más claro.

Tengo que mejorar un poco el motor de física para prevenir las colisiones entre objetos no dinámicos, pero para orientarme un poco mejor ¿me contarías un poco más sobre tu juego?, así que de paso hago una demo que te sirva.

Por cierto, estoy por investigar este artículo que habla sobre cómo “separar” los objetos una vez que entran en contacto Collision Detection and Physics - JavaScript Tutorial | Spicy Yoghurt

1 Like

Ahora entiendo lo que dices @GDPH armaba un ejemplo sobre cómo funcionan las propiedades de sensor, dinamica, etc. Lo que sucede es que si dos actores son NO dinámicos, entonces se atraviesan:

Abrir este proyecto en el editor de pilas

En ese ejemplo, el actor logo se mueve con las flechitas, es no dinámico y puede atravesar la plataforma que tiene propiedades similares.
No me había percatado de eso hasta ahora. Si o si uno de los actores debe ser dinámico, lo que puedes hacer es que el suelo tenga figura dinámica y para evitar que se caiga, en la función actualizar decirle que su posición sea fija con:

actualizar() {
    this.x = -100;
  }

No debe ser muy eficiente, pero dudo que afecte realmente.

Lo otro que puedes hacer es desactivar la gravedad de la escena, ya que según cuentas el personaje que puede moverse es no dinámico y por tanto no se ve afectado por la gravedad. También deberias asegurarte que dicho personaje no tenga marcada la propiedad ¿es sensnor?

@hugoruscitti Te agradezco y por cierto se ve bueno lo que compartes.
En realidad el proyecto no era otra cosa que un test para ir aprendiendo Pilas. El escenario es una aceituna que si toca los borden de la escena que en realidad eran dos actores pared con trasparencia, pasa a otra escena(como si fuera una puerta); el personaje se mueve con las flechas izquierda y derecha. El problema es que al checar las colisiones como bien dice @lukeitor uno de los dos debe ser dinámica y para que este no se vea afectados por la gravedad, hay que poner su Y en este caso como fija. Así que les agradezco mucho, ya ha quedado resulto pero supongo que puede ser algo que quedaría como “agregado” en un Sprint.
Son una gran comunidad, saludos. :slight_smile: :v:

1 Like