Fix removing destroyed Container child

This commit is contained in:
samme 2023-12-03 16:14:46 -08:00
parent 47d393ac29
commit 5cd5cadf79

View file

@ -438,7 +438,7 @@ var Container = new Class({
*/ */
addHandler: function (gameObject) addHandler: function (gameObject)
{ {
gameObject.once(Events.DESTROY, this.remove, this); gameObject.once(Events.DESTROY, this.onChildDestroyed, this);
if (this.exclusive) if (this.exclusive)
{ {
@ -976,7 +976,7 @@ var Container = new Class({
{ {
if (list[i] && list[i].scene) if (list[i] && list[i].scene)
{ {
list[i].off(Events.DESTROY, this.remove, this); list[i].off(Events.DESTROY, this.onChildDestroyed, this);
list[i].destroy(); list[i].destroy();
} }
@ -1452,6 +1452,25 @@ var Container = new Class({
this.tempTransformMatrix.destroy(); this.tempTransformMatrix.destroy();
this.list = []; this.list = [];
},
/**
* Internal handler, called when a child is destroyed.
*
* @method Phaser.GameObjects.Container#onChildDestroyed
* @protected
* @since 3.70.1
*/
onChildDestroyed: function (gameObject)
{
ArrayUtils.Remove(this.list, gameObject);
if (this.exclusive)
{
gameObject.parentContainer = null;
gameObject.removedFromScene();
}
} }
}); });