diff --git a/src/core/ticker/TickerListener.js b/src/core/ticker/TickerListener.js index 2bedb34..8d0479d 100644 --- a/src/core/ticker/TickerListener.js +++ b/src/core/ticker/TickerListener.js @@ -91,13 +91,13 @@ this.fn(deltaTime); } + const redirect = this.next; + if (this.once) { - this.destroy(); + this.destroy(true); } - const redirect = this.next; - // Soft-destroying should remove // the next reference if (this._destroyed) diff --git a/src/core/ticker/TickerListener.js b/src/core/ticker/TickerListener.js index 2bedb34..8d0479d 100644 --- a/src/core/ticker/TickerListener.js +++ b/src/core/ticker/TickerListener.js @@ -91,13 +91,13 @@ this.fn(deltaTime); } + const redirect = this.next; + if (this.once) { - this.destroy(); + this.destroy(true); } - const redirect = this.next; - // Soft-destroying should remove // the next reference if (this._destroyed) diff --git a/test/core/Ticker.js b/test/core/Ticker.js index 188770f..cd8e33c 100644 --- a/test/core/Ticker.js +++ b/test/core/Ticker.js @@ -150,6 +150,32 @@ expect(this.length()).to.equal(length); }); + it('should remove once listener in a stack', function () + { + const length = this.length(); + const listener1 = sinon.spy(); + const listener2 = sinon.spy(); + const listener3 = sinon.spy(); + + shared.add(listener1, null, PIXI.UPDATE_PRIORITY.HIGH); + shared.addOnce(listener2, null, PIXI.UPDATE_PRIORITY.NORMAL); + shared.add(listener3, null, PIXI.UPDATE_PRIORITY.LOW); + + shared.update(); + + expect(this.length()).to.equal(length + 2); + + shared.update(); + + expect(listener1.calledTwice).to.be.true; + expect(listener2.calledOnce).to.be.true; + expect(listener3.calledTwice).to.be.true; + + shared.remove(listener1).remove(listener3); + + expect(this.length()).to.equal(length); + }); + it('should call inserted item with a lower priority', function () { const length = this.length();