Mas de una colision para un actor

HOLA, SALUDOS:
estoy teniendo un problema, hasta ahora pude hacer que mi protagonista colisione con “enemigo”, con “picos” y sea eliminado o viceversa, agregue monedas para recolectar y agregue algunos sonidos, pero ahora quiero agregar otro actor (“puerta”) para que cuando el protagonista colisione se envíe a otra escena y asi avanzar en el juego pero al colisionar no hace nada .

Aquí el código:

https://app.pilas-engine.com.ar/#/proyecto/3fb98c98-f602-4c98-8388-9d5be9803578

Gracias.

Hola @Daniel_Toledo, si no me equivoco el problema viene porque sobre una llave en el código del actor:

image

Quitando esa llave que está señalada con la flecha y y agregando otra al final del archivo comenzó a funcionar correctamente:

image

Te paso la versión con el arreglo:

https://app.pilas-engine.com.ar/#/proyecto/c0228d1a-9588-4b67-afd6-d24dda24c7d2

Ah, por cierto, si pulsás ctrl+s estando dentro del editor de código vas a notar que el código se identará de forma automática, lo que lo hace mucho más fácil de editar porque rápidamente se puede distinguir los bloques de código:

Este identado automático se debería aplicar automáticamente, pero por lo que detecté ahora pilas tiene un bug y no lo está haciendo cuando se pulsa ejecutar, solamente lo hace cuando pulsas ctrl+s… lo voy a corregir para la próxima versión, pero mientras tanto te recomiendo pulsar cltr+s cada tanto para que el código te resulte más sencillo de leer.

¡Abrazo!

Hola Hugo muchas gracias x tu ayuda, no quiero abusar pero no puedo hacer funcionar el contador de monedas q podrá ser? :sob:, Hasta ahora veo q vengo errando ala sintaxis, pero con la ayuda del foro solucione varios inconvenientes
Super agradecido!!!

Hola @Daniel_Toledo!!, para incrementar el contador de monedas lo que podes hacer es editar el código de la moneda cuando se produce la colisión.

Lo que deberías hacer es conseguir una referencia al actor puntaje, y luego incrementarlo. Todo esto justo después de eliminar la moneda del escenario:

Ah, y ten en cuenta hacer esto con todos los códigos de las monedas.

Te paso el proyecto con ese cambio:

https://app.pilas-engine.com.ar/#/proyecto/4f6fce68-6769-4f77-bb84-4b0a35d53d71

Por cierto, sentite libre de preguntar, en el foro estamos para ayudar :slight_smile: además tu consulta también puede incentivar a otras personas a que visiten el foro y tengan propongan inquietudes similares a las tuyas o se animen a hacer juegos, ¡todo suma!

Lo pude solucionar… ahora sí yo quisiera q cuando toque la puerta pase a otra escena //this.pilas.cambiar_escena("");// aló cuál la escena cambia pero el protagonista desaparece, y si, por ej, quiero que para q se “active” la puerta primero el protagonista tenga q tener una llave tendría q hacer algo similar a las monedas??
Gracias!! :muscle::muscle::muscle::muscle:

¡hola @Daniel_Toledo!

La lógica para permitir que un actor pueda tomar una llave y luego poder abrir una puerta es muy similar a lo que ya habías hecho con la moneda. La única diferencia es que debería guardar en algún lado que el actor efectivamente tomó la llave.

Te comento una forma de hacerlo: Primero podrías tener una variable llamada tengo_la_llave en el actor protagonista así:

De hecho, también te recomiendo poner un observador como se ve en la linea 8, dentro del método actualizar. De esa forma, el actor va a almacenar esa variable y vas a poder ver su valor en pantalla cuando ejecutes el juego:

image

Ahora bien, lo siguiente que podes hacer es crear un actor que represente la llave y otro la puerta. Estos actores tienen que tener etiquetas como “llave” y “puerta” así los podemos identificar más adelante, y con figuras de colisión:

image

Ahora, en el protagonista podrías implementar la función cuando_colisiona para reaccionar a la colisión:

  • Si la colisión es con la llave, simplemente podes hacer que el actor llave se elimine y que se ponga la variable tengo_la_llave en true.
  • Si la colisión es con la puerta, pueden pasar dos cosas:
    • si la variable tengo_la_llave es true podrías pasar de nivel.
    • si la variable tengo_la_llave es false, no deberías hacer nada. Yo de hecho ni puse else en el if para ignorar por completo que sucedió la colisión.

El código me quedó así:

Ten en cuenta que usé la función cuando_colisiona, y no cuando_comienza_una_colisión, ya que todas las figuras son estáticas y esa es la única función que detecta ese tipo de colisiones.

Ah, me falta lo último. Para cambiar de escena tenes que llamar a la función this.pilas.cambiar_escena como habías mencionado, solo que el personaje no va a estar en la siguiente escena. Si queres que el protagonista se mueva a la siguiente escena tenes que clonar el actor en el método iniciar de la escena 2 así:

Te paso el código que pude armar:

https://app.pilas-engine.com.ar/#/proyecto/1b66d643-cd55-4f2e-8981-5c352448510d

¡Cualquier duda preguntame!

Hola, buena día a todos!! continuo mi proyecto pero me trabo, seguí paso a paso y pude colocar el observador de la lave tmb puedo aparecer en otra escena, pero al llamar la función “cuando_colisiona” (if llave o puerta) el protagonista no hace nada, pareciera que colisiona contra una pared y el observador se mantiene en false. Continuo intentando, gracias!
https://app.pilas-engine.com.ar/#/proyecto/a428ac5a-f9de-4912-a17f-b23ad417b8e9

Hola @Daniel_Toledo!!, pienso que el problema está en que hay partes del código que no tienen la sintaxis correcta:

PilasEngine * 2020-07-26 19-37-42

Fijate que ahí cambié la última parte del código del actor protagonista y salió andando!!!

https://app.pilas-engine.com.ar/#/proyecto/ba683245-e222-4eda-a0a7-3125c403cc6d