2015-12-31 6 views
3

Мне нужно связать объекты SceneKit Node с произвольными объектами в моей программе и искать оптимальное решение.SceneKit: Связывание узлов с объектами модели

Вот пример того, что я имею в виду: Скажем, у меня есть программа, которая отображает атомы в молекуле с помощью SceneKit. У меня есть классы Molecule и Atom, которые моделируют мои данные. Затем я обрабатываю молекулу с помощью SceneKit. Когда я нажимаю на узле сферы в Scene View, мне нужно знать, какой Atom объект, представляющая сфера (Molecule содержит массив Atoms)

я мог бы создать словарь, который отображает Node на Atom объект, но удивительно если есть способ добавить ссылку объекта Atom на сферный узел. Следует ли использовать привязки Key-Value?

Я очень новичок в программировании Какао и ищу подталкивание в правильном направлении для подхода. Затем я смогу изучить особенности реализации.

ответ

2

Как насчет того, чтобы начать с нескольких разных подклассов SCNNode? Первый для вашего Atom, второй для вашей Molecule. Каждый MoleculeNode имеет один или несколько AtomNodes в качестве детей. AtomNode и MoleculeNode имеют слабые ссылки на Atom или Molecule, которые они представляют.

Теперь вы можете легко перемещать или поворачивать MoleculeNode, и все AtomNodes будут перемещаться вместе с ним. Каждая геометрия AtomNode останется фиксированной относительно родительского MoleculeNode.

Испытание на удар будет возвращать как AtomNodes, так и MoleculeNodes. Вы можете отфильтровать этот результат, если хотите, либо классом узла, либо установив name узла в «Atom» или «Molecule». SCNHitTestBoundingBoxOnlyKey может быть полезен, если вы хотите быть снисходительным к точности требуемых кликов.

+0

Спасибо, Хэл за то, что нашли время, чтобы прочитать и ответить. Я откровенно немного смущен тем, что не подумал об этом. Поскольку я пишу эту программу с использованием подхода к функциональному программированию, сначала написал мои классы моделей, и я новичок в программировании SceneKit/Cocoa/Mac/iOS, все это сговорилось против меня. Полагаю, мне просто нужно было «вернуться к основам» и подумать об этом, используя фундаментальный ООП. Я обязательно буду следовать вашему предлагаемому подходу. –

0

Как небольшая альтернатива вы можете получить Map от SCNNode до ModelObject.

Смежные вопросы