Parece que tengo problemas para eliminar addEventListeners cuando salto entre fotogramas. Cuando salto de un lado a otro, los addEventListeners todavía parecen acumularse:
Código del cuadro 1:
this.stop(); this.arrowForward_btn.addEventListener("click", arrow_btnClickForward.bind(this)); function arrow_btnClickForward() { this.arrowForward_btn.removeEventListener("click", arrow_btnClickForward.bind(this)); console.log("went forward"); alert("alert: went forward!"); this.gotoAndStop(1); }Código del cuadro 2:
this.arrowBack_btn.addEventListener("click", arrow_btnClickBack.bind(this)); function arrow_btnClickBack() { this.arrowBack_btn.removeEventListener("click", arrow_btnClickBack.bind(this)); console.log("went back!"); alert("alert: went back!"); this.gotoAndStop(0); }¿Cómo elimino los addEventListeners para que no se acumulen?
Actualización: Me dijeron acerca de evt.remove(); así que usé eso en mis códigos y funciona:
Código del cuadro 1:
this.stop(); this.arrowForward_btn.addEventListener("click", arrow_btnClickForward.bind(this)); function arrow_btnClickForward() { console.log("went forward"); alert("alert: went forward!"); this.gotoAndStop(1); evt.remove(); }Código del cuadro 2:
this.arrowBack_btn.addEventListener("click", arrow_btnClickBack.bind(this)); function arrow_btnClickBack(evt) { console.log("went back!"); alert("alert: went back!"); this.gotoAndStop(0); evt.remove(); }Su actualización es mejor , pero podría ayudar a explicar algunas cosas:
bind() , genera un nuevo cierre único. Cada vez. Tenga en cuenta que evt.remove() debería funcionar para usted, pero en su primer ejemplo (código del marco 1), el controlador de eventos no tiene un evt .
Algunas cosas en CreateJS podrían ayudar:
on() es un atajo para addEventListener, que lo ayuda a hacer cosas como pasar el alcance this.arrowForward_btn.on("click", arrow_btnClickForward, this);once , por lo que si sabe que su evento se activará una vez, puede eliminarse automáticamente. this.arrowForward_btn.on("click", arrow_btnClickForward, this, true);on() devuelve el cierre generado. Puede usar off() para eliminar fácilmente. var handler = this.arrowForward_btn.on("click", arrow_btnClickForward, this); // later this.arrowForward.off("click", handler);Con suerte, eso le brinda una mejor comprensión de los controladores de eventos en CreateJS, y alguna combinación de eso funcionará.
--
También puede ser útil saber que puede escribir todo su código en el primer cuadro, ya que CreateJS arranca instancias en cada cuadro cuando se inicializa el movieclip. Entonces arrowBack_btn también existirá en el marco 1. Solo puede agregar el código una vez y asegurarse de que solo se ejecute
if (this.inited == false) { this.inited = true; this.arrowForward_btn.on("click", arrow_btnClickForward, this); this.arrowBack_btn.on("click", arrow_btnClickBack, this); function arrow_btnClickForward() { console.log("went forward"); alert("alert: went forward!"); this.gotoAndStop(1); } function arrow_btnClickBack(evt) { console.log("went back!"); alert("alert: went back!"); this.gotoAndStop(0); } }No probé esto, pero debería funcionar :D