SQLの窓 イラストAC フリー素材

2012年05月26日

THREE.Scene クラスの remove メソッド

THREE.Scene => THREE.Object3D

Scene に追加する場合は、add を使用しますが、削除する場合は remove を使用します。いずれも、Object3D のメソッドであり、Scene の場合は特別な処理が Object3D 内でなされており、その処理を受け持つのが、Scene のメソッドである、__removeObject となります。

remove メソッド
remove: function ( object ) {

	var index = this.children.indexOf( object );

	if ( index !== - 1 ) {

		object.parent = undefined;
		this.children.splice( index, 1 );

		// remove from scene

		var scene = this;

		while ( scene.parent !== undefined ) {

			scene = scene.parent;

		}

		if ( scene !== undefined && scene instanceof THREE.Scene ) {

			scene.__removeObject( object );

		}

	}

}

まず、削除対象の引数のオブジェクトが、メソッドが実行されたオブジェクトに属するかどうかチェックして、存在した場合、parent プロパティをリセットして、メソッドが実行されたオブジェクから対象オブジェクトを削除しています( 内部仕様の配列から削除 )

その後、メソッドが実行されたオブジェクから、Scene オブジェクトを探し出して( 一番トップレベルにあるという仕様 )、Scene が保有する特別な内部仕様から対象のオブジェクトを __removeObject で削除します

Scene で定義されている配列

__objects = [];
__lights = [];

__removeObject メソッド
THREE.Scene.prototype.__removeObject = function ( object ) {

	if ( object instanceof THREE.Light ) {

		var i = this.__lights.indexOf( object );

		if ( i !== -1 ) {

			this.__lights.splice( i, 1 );

		}

	} else if ( !( object instanceof THREE.Camera ) ) {

		var i = this.__objects.indexOf( object );

		if( i !== -1 ) {

			this.__objects.splice( i, 1 );
			this.__objectsRemoved.push( object );

			// check if previously added

			var ai = this.__objectsAdded.indexOf( object );

			if ( ai !== -1 ) {

				this.__objectsAdded.splice( ai, 1 );

			}

		}

	}

	for ( var c = 0; c < object.children.length; c ++ ) {

		this.__removeObject( object.children[ c ] );

	}

}




タグ:Three.js 3D
【Three.jsの最新記事】
posted by at 2012-05-26 13:21 | Three.js | このブログの読者になる | 更新情報をチェックする


Android SDK ポケットリファレンス
改訂版 Webデザイナーのための jQuery入門
今すぐ使えるかんたん ホームページ HTML&CSS入門
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX