这是我的问题。我在maya上创建了一个具有以下层次结构的对象:
bigButton
|
|-- redDome
| |
| |-- polySurface1
| |__ polySurface2
|
|-- greenDome
|
|-- polySurface3
|__ polySurface4
我将其转换为DAE并将其导入SceneKit。 Xcode将更多节点添加到层次结构中。层次结构现在是:
bitButton Reference
|
|_ referenceRoot
|
|
|__ bigButton
|
|-- redDome
| |
| |-- polySurface1
| |__ polySurface2
|
|-- greenDome
|
|-- polySurface3
|__ polySurface4
现在我触摸按钮,我正在尝试确定按钮是否被点按。对我来说唯一重要的节点是bigButton
。我点击对象并使用此方法:
- (void) handleTap:(UIGestureRecognizer*)gestureRecognize
{
// retrieve the SCNView
SCNView *scnView = (SCNView *)self.view;
// check what nodes are tapped
CGPoint p = [gestureRecognize locationInView:scnView];
NSArray *hitResults = [scnView hitTest:p options:nil];
// check that we clicked on at least one object
if([hitResults count] > 0){
// retrieved the first clicked object
SCNHitTestResult *result = [hitResults objectAtIndex:0];
result.node
告诉我所触及的节点是polySurface1
或polySurface2
无论如何。它永远不会告诉我bigButton
被点击,因为它只是一个节点,而不是表面。
好的,我可以使用parentNode
来检测父节点,但这是愚蠢的,因为result.node
可以位于bigButton
之上或之下的不同层次结构级别上。这是唯一的跛脚模式吗?横向层次结构搜索正确的节点或是否有一种美妙的方式?
感谢。
答案 0 :(得分:1)
对我来说唯一重要的节点是
bigButton
。
如果你的意思是你从来没有兴趣知道任何其他节点被击中,那么你应该看一下SCNHitTestRootNodeKey
命中测试选项。
指定bigButton
作为根节点意味着获取任何命中测试结果意味着bigButton
被击中,而无需进行任何检查。