As you've discovered, adding an event listener to an object doesn't replace the previous event listener. They are two ways around this: Remove the old event listeners, or only assign event listeners once. Removing the event listeners is done using removeEventListener, but this is more complicated when you're using bind(). I've described the workarounds for this issue before, here. Or if you're feeling experimental, you can try adding this to your initialization frame: // add event listener, bound to object scope and replacing any existing listeners of same type createjs.DisplayObject.prototype.addSafeListener = function(type, listener) { if (typeof type === "string" && typeof listener === "function") { type = type.toLowerCase(); var funcRef = "_safeListener" + type; if (this[funcRef]) { this.removeEventListener(type, this[funcRef]); } this[funcRef] = listener.bind(this); return this.addEventListener(type, this[funcRef]); } } This adds a new method to all objects, addSafeListener(). You call it the same as addEventListener, but it automatically binds the listener function to the object scope, and removes any listener of the same type previously added with this function. The second approach to your problem, and the solution I'd favor, would be to only assign event listeners to your buttons once, then configure their function through global variables. For example your one and only Next button handler could look like this: function fl_ClickNext() { if (myNextFrame) this.gotoAndPlay(myNextFrame); } } Then in all the frames where you're currently assigning new event handlers and defining new handler functions, just do this instead: myNextFrame = "scene2b";
... View more