2015-12-31 60 views
3

我需要將SceneKit節點對象與我的程序中的任意對象相關聯,並且正在尋找最佳解決方案。SceneKit:將節點與模型對象關聯

下面是我的意思的一個例子: 假設我有一個程序使用SceneKit呈現分子中的原子。我有模擬我的數據的課程MoleculeAtom。然後我使用SceneKit渲染分子。 當我點擊場景視圖中的一個節點球,我需要知道哪些是球體代表Atom對象(Molecule包含Atoms數組)

我可以創建一個映射NodeAtom對象字典,但奇蹟如果有辦法將Atom對象引用添加到球體節點。應該使用鍵值綁定嗎?

我對Cocoa編程非常陌生,並且正在尋找一種方法的正確方向。然後我可以研究實現細節。

回答

2

如何從幾個不同的SCNNode子類開始?第一個是你的Atom,第二個是你的分子。每個MoleculeNode都有一個或多個AtomNode作爲子節點。 AtomNode和MoleculeNode對它們所代表的Atom或Molecule具有弱引用。

現在您可以輕鬆移動或旋轉MoleculeNode,並且所有的AtomNodes都將隨之移動。相對於父MoleculeNode,每個AtomNode的幾何將保持固定。

命中測試將返回AtomNodes和MoleculeNodes。如果需要,可以通過節點的類或通過將節點的name設置爲「Atom」或「Molecule」來過濾該結果。如果您想要對所需點擊的精度要求寬鬆,則SCNHitTestBoundingBoxOnlyKey可能會很有用。

+0

謝謝,哈爾花時間閱讀和回覆。沒有想到這種方法,我坦白地感到有些尷尬。由於我正在使用函數式編程方法編寫此程序,首先編寫了我的模型類,並且是SceneKit/Cocoa/Mac/iOS編程的新手,但它們都與我密不可分。我想我只需要「迴歸基礎」,並通過使用基本的面向對象來思考這一點。我一定會按照你提出的方法。 –

0

就像一個小的選擇,你可以MapSCNNodeModelObject