¡Muy bueno! Mejoró bastante.
Respecto de lo que dijo @PabloSosa sobre disparar a través de las paredes cuando te pegas a ellas. Si quieres, puedes arreglarlo usando un laser, cuando el laser toque las paredes anulas la opción de disparar.
Te comparto cómo lo hice:
El personaje dispara con el espacio y si está a 50 (¿píxeles? supongo) de distancia no dispare y diga que está muy cerca de la pared. La distancia de 50 corresponde al largo del laser “pistola”.
cuando_pulsa_tecla(tecla) {
if (tecla == "espacio") {
//cuando pulso espacio, primero verifico si estoy cerca de la pared.
if (!this.pegado_a_la_pared()) {
//De aquí en adelante es todo para disparar el laser en la dirección que apunta
//el alien
let posiciion_x_del_laser = 40;
if (this.espejado) {
posiciion_x_del_laser = -40;
}
let laser = this.pilas.clonar("laser");
laser.y = this.y;
laser.x = this.x + posiciion_x_del_laser;
}
else {
//Esto se ejecuta si el alien está cerca de la pared, es decir, si el laser "pistola"
//colisiona con el actor pared.
this.decir("¡Estoy muy cerca de la pared!");
this.reproducir_sonido("seleccion-grave");
}
}
}
//Esta función verifica si la pared está muy cerca, más precisamente, verifica si el laser, de largo
//50 , colisiona con un actor de etiqueta pared.
pegado_a_la_pared() {
return this.pistola.colisiona_con_un_actor_de_etiqueta("pared");
//devuelve true si coliona, false si no lo hace.
}
Abrir este proyecto en el editor de pilas
Espero te sirva de algo, y si tienes dudas, puedes preguntar.