¡Hola @Penelope_Vanessa !, es muy interesante tu consulta, de hecho yo no había notado que se podía hacer eso de saltar usando las paredes en los juegos de plataformas, me dejaste pensando en formas de resolverlo en la próxima versión.
Mientras tanto, te comento una estrategia que puede servir en tu juego para evitar que el jugador rebote en las paredes y las atraviese. Lo que podrías usar es algo llamado sensores, la idea del sensor es que te permite prohibir algunos movimientos o acciones “detectando” el escenario u otros actores.
Por ejemplo, comencemos por el salto. Lo ideal es que un personaje solo pueda saltar si tiene los pies en el suelo. Para eso, lo que podrías hacer es agregar un sensor en el actor así:
Asegurate de ponerle un nombre a los sensores, como “pies” y también colocarlo en la parte inferior del actor, sin que llegue a los bordes horizontales para que no pueda “pisar” las paredes.
Luego, en el código, tendrías que obtener el sensor y detectar si el sensor está en contacto con el suelo. Y solo en ese caso, si el sensor está en contacto con el suelo, le deberías permitir saltar:
Es decir, si el actor no está tocando el suelo ni siquiera vamos a leer el control hacia arriba o impulsar al actor. Solo vamos a considerar esas lineas de código si toca el suelo.
Con ese código, vas a notar que el efecto de salto queda muy bien, aunque nos falta resolver el tema de las paredes. Te paso el ejemplo de cómo quedaría hasta ahora:
https://app.pilas-engine.com.ar/#/proyecto/93940760-54cd-45bd-a986-389f0a0c8a10
Ahora, vamos con el tema de las paredes y el salto: el desafío aquí es evitar que el actor pueda sobre-pasar un objeto. Esto sucede porque pilas te permite hacer movimientos (como x = x + 5 ) y luego “corrige” la posición de los actores y la física para evitar que los actores aparezcan uno arriba del otro. Ese instante donde aparecen solapados se lo que da problemas como decías.
Así que para evitar que los actores se solapen también se pueden usar sensores. Por ejemplo podrías crear un sensor a la derecha y a la izquierda del actor:
y luego, con estos sensores, modificar el código para que solo se pueda ir hacia los costados si no hay colisiones con otros actores.
Por ejemplo, si queremos que el actor no pueda solaparse con una pared que aparece a la derecha podríamos escribir este código:
Notá que el código es igual al que tenía tu ejemplo, solo que agregué el acceso al sensor y luego en la linea 19 coloqué una condición: “el actor solo se podrá mover a la derecha si no hay nada colisionando con el sensor de la derecha”.
Ahora, este código se podría mejorar mucho. Me imagino que en tu juego habrá objetos que deberán funcionar como paredes y otros comos enemigos o recolectables. Si es así, tendrías que usar etiquetas para reconocer si el actor que toca el sensor se tiene que poder sobre-pasar o no.
Te envío la versión modificada con los sensores, ojalá te sirva!!! y avisanos cualquier cosa.
Abrir este proyecto en el editor de pilas