2011-12-07 13 views
1

私はこのプロジェクトの最終段階にあります。私は作業しており、オブジェクトをクリックしてドラッグする機能に問題があります。私はitemsという配列にそれらをすべて追加しました。そして今すぐ動作します。 Hereは実際のページへのリンクです。右上のメニューから項目を追加すると、その項目が表示されますが、ドラッグすることはできます。私が知ることから、問題は各アイテムを1つのアイテムではなく一連のアイテムとして扱っていることです。これは、それぞれのモデルが複数のモデルを結合しているので理にかなっていますが、その回避策がわかりません。何か案は?ここで オブジェクトの一部だけをクリックしてドラッグします。

は、私は、マウスの相互作用を制御している三つの機能です:

function onMouseMove(event){ 
    event.preventDefault(); 

    mouse.x = (event.clientX/width) * 2 - 1; 
    mouse.y = - (event.clientY/height) * 2 + 1; 

    var vector = new THREE.Vector3(mouse.x, mouse.y, 0); 
    projector.unprojectVector(vector, camera); 

    var ray = new THREE.Ray(camera.position, vector.subSelf(camera.position).normalize()); 

    if (SELECTED) { 

      var intersects = ray.intersectObject(plane); 
      SELECTED.position.copy(intersects[ 0 ].point.subSelf(offset)); 
      return; 

    } 

    var intersects = ray.intersectObjects(items); 

    if (intersects.length > 0) { 

      if (INTERSECTED != intersects[ 0 ]) { 

        INTERSECTED = intersects[ 0 ].object; 

        plane.position.copy(INTERSECTED.position); 
      } 

      container.style.cursor = 'pointer'; 
    } 
    else { 
        INTERSECTED = null; 
        container.style.cursor = 'auto'; 
    } 

} 

function onMouseDown(event) { 
    event.preventDefault(); 

    var vector = new THREE.Vector3(mouse.x, mouse.y, 0); 
    projector.unprojectVector(vector, camera); 

    var ray = new THREE.Ray(camera.position, vector.subSelf(camera.position).normalize()); 

    var intersects = ray.intersectObjects(items); 

    if (intersects.length > 0) { 

      SELECTED = intersects[ 0 ].object; 

      var intersects = ray.intersectObject(plane); 
      offset.copy(intersects[ 0 ].point).subSelf(plane.position); 

      container.style.cursor = 'move'; 

    } 

} 

function onMouseUp(event) { 
    event.preventDefault(); 

    if (INTERSECTED) { 
      plane.position.copy(INTERSECTED.position); 
      SELECTED = null; 
    } 

    container.style.cursor = 'auto'; 
} 

それは重くthis例に基づいていますが、カラービットなし。私は今、完全なオブジェクトを移動させることができるので、

// OLD 
SELECTED = intersects[0].object; 
// NEW 
SELECTED = intersects[0].object.parent; 

ようれるonmousedown内のコードを変更することにより

。これは、オブジェクトに親が1つしかない場合にのみ機能し、一部の項目はこのコードでは移動できません。誰も親オブジェクトを持っているかどうかを判断し、親オブジェクトがある場合は上に移動することを提案していますか?れるonmousedown

SELECTED = intersects[0].object; 
while(SELECTED.parent != scene){ 
    SELECTED = SELECTED.parent; 
} 

これはつかんでオブジェクトがシーンではなく、すべてのモデルがドラッグできます最高レベルであることを保証に以下を追加することで解決

答えて

0

+0

投票矢印の下にあるチェックマークをクリックすると、未回答の質問には表示されないように、この回答にマークを付けることができますか?ありがとう! –

2

誰かがまだこの質問に興味があれば、subSelfメソッドは今やsubと呼ばれています。

関連する問題