Hola, que tal? Estos últimos días estuve realizando un juego en pilas. Y durante el desarrollo surgió un error en mi código, después de buscar y buscar, no pude encontrarlo.
Lo que me pasa es que al momento de realizar una animación de ataque con el personaje jugable, solamente se realiza una vez, es decir que cada vez que apreto el botón de atacar, ataca pero sin la animación (La animación se ejecuta una vez nomás).
Les agradecería un montón si alguien puede darme una pequeña ayuda, dejo el código del actor acá abajo:
Desde ya muchas gracias, saludos.
class hero1 extends Actor {
toca_el_suelo = false;
pies = null;
iniciar() {
this.estado = "parado";
this.pies = this.obtener_sensor("pies");
}
actualizar() {
if (this.pies.colisiones.length > 0) {
this.toca_el_suelo = true;
} else {
this.toca_el_suelo = false;
}
this.pilas.camara.seguir_al_actor(this);
}
parado_iniciar() {
this.reproducir_animacion("hero_idle");
}
parado_actualizar() {
if (this.pilas.control.izquierda || this.pilas.control.derecha) {
this.estado = "camina";
}
if (this.pilas.control.arriba && this.toca_el_suelo) {
this.impulsar(0, 8);
this.estado = "salta";
}
if (!this.toca_el_suelo) {
this.estado = "salta";
}
if (this.pilas.control.espacio) this.estado = "golpea";
}
camina_iniciar() {
this.reproducir_animacion("hero_run");
}
camina_actualizar() {
if (this.pilas.control.izquierda) {
this.x -= 3;
this.espejado = true;
}
if (this.pilas.control.derecha) {
this.x += 3;
this.espejado = false;
}
if (!this.pilas.control.derecha && !this.pilas.control.izquierda) {
this.estado = "parado";
return;
}
if (this.pilas.control.arriba && this.toca_el_suelo) {
this.impulsar(0, 8);
this.estado = "salta";
}
if (!this.toca_el_suelo) {
this.estado = "salta";
}
if (this.pilas.control.espacio) {
this.estado = "golpea";
}
}
golpea_iniciar() {
this.animacion = "hero_sword";
}
golpea_actualizar() {
let sensor_derecho = this.obtener_sensor("golpe_der");
let sensor_izquierdo = this.obtener_sensor("golpe_izq");
function golpear_enemigo(enemigo: Actor) {
enemigo.enviar_mensaje("golpear");
}
if (this.espejado) {
if (sensor_izquierdo.colisiona_con_etiqueta("enemigo")) {
sensor_izquierdo.colisiones.map(golpear_enemigo);
}
} else {
if (sensor_derecho.colisiona_con_etiqueta("enemigo")) {
sensor_derecho.colisiones.map(golpear_enemigo);
}
}
}
cuando_finaliza_animacion(nombre: "hero_sword") {
this.estado = "parado";
}
salta_iniciar() {
this.reproducir_animacion("hero_jump");
}
salta_actualizar() {
if (this.pilas.control.izquierda) {
this.x -= 2.5;
}
if (this.pilas.control.derecha) {
this.x += 2.5;
}
if (this.toca_el_suelo) {
this.estado = "parado";
}
}
cuando_comienza_una_colision(actor) {
if (actor.etiqueta === "plataforma") {
if (this.velocidad_y > 0.1) {
return true;
}
}
}
}