Преглед изворни кода

Object3D: Recursively dispatch removedFromScene event. Should solve #5269.

Mr.doob пре 11 година
родитељ
комит
3fd3c1c3b9
2 измењених фајлова са 13 додато и 4 уклоњено
  1. 10 1
      src/core/Object3D.js
  2. 3 3
      src/renderers/WebGLRenderer.js

+ 10 - 1
src/core/Object3D.js

@@ -357,10 +357,19 @@ THREE.Object3D.prototype = {
 		if ( index !== - 1 ) {
 
 			object.parent = undefined;
-			object.dispatchEvent( { type: 'removed' } );
 
 			this.children.splice( index, 1 );
 
+			object.dispatchEvent( { type: 'removed' } );
+
+			// notify renderer object and descendants were removed.
+
+			object.traverse( function ( child ) {
+
+				child.dispatchEvent( { type: 'removedFromScene' } );
+
+			} );
+
 		}
 
 	},

+ 3 - 3
src/renderers/WebGLRenderer.js

@@ -513,11 +513,11 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 	// Events
 	
-	var onObjectRemoved = function ( event ) {
+	var onObjectRemovedFromScene = function ( event ) {
 
 		var object = event.target;
 
-		object.removeEventListener( 'removed', onObjectRemoved );
+		object.removeEventListener( 'removedFromScene', onObjectRemovedFromScene );
 
 		removeObject( object )
 
@@ -3553,7 +3553,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 			object._modelViewMatrix = new THREE.Matrix4();
 			object._normalMatrix = new THREE.Matrix3();
 
-			object.addEventListener( 'removed', onObjectRemoved );
+			object.addEventListener( 'removedFromScene', onObjectRemovedFromScene );
 
 		}