2013-08-22 158 views
4

我在ThreeJS場景中添加了一些對象(使用scene.add(object))。我知道對象的名稱,只是想從scene.children中獲取它的索引。如何訪問threeJS中的scene.children元素?

我試圖使用scene.children.indexOf("objectName"),但它返回-1索引。任何人都可以建議我能做些什麼?

感謝

回答

7
var object = scene.getObjectByName("objectName"); 

或遞歸搜索場景圖

var object = scene.getObjectByName("objectName", true); 

或者,您也可以通過ID進行搜索。

var id = scene.getObjectById(4, true); 

three.js所R.60

+0

我剛剛按照你的建議嘗試過,但得到了「未定義」。我通過在alert()中放入'var object = scene.getObjectByName(「objectName」);'來檢查並得到「undefined」。因爲我對ThreeJS的瞭解不多,但是我發現物體被放置在'scene.children'中。我們添加到場景中的每個對象都會附加到scene.children的結尾。所以我寫了這段代碼:'var lastIndex = scene.children.length - 1; endElement = scene.children [lastIndex]; scene.remove(endElement);'這將刪除我繪製的最後一個元素。我需要你的幫助來從scene.children中提取對象名稱的ID元素。謝謝。 – harman052

+0

@ user2615614您是否設置了添加到場景中的對象的名稱參數?一些示例代碼將有助於診斷錯誤:) –

+4

您的「接受」率爲零。請記住通過點擊答案旁邊的複選標記來接受答案。爲其他已經回答你的問題的人也這樣做。如果您的程序無法正常工作,請發表新帖子,顯示您的代碼並提出具體問題。謝謝。 – WestLangley

0

你,因爲你找回對象不是value/text得到一個警報文本未定義。你需要提醒像scene.getObjectByName("objectName").namescene.getObjectByName("objectName").id我相信。

0

我相信的東西,實際上可以回答你的問題是,我用它來清潔現場下面的代碼:

while (scene.children.length > 0) { 
      scene.remove(scene.children[scene.children.length - 1]); 
} 

這樣我不需要通過其名稱或ID訪問一個元素。該對象只是通過索引從數組中提取,因此它就像scene.children[i]