手势识别器和SceneKit

时间:2014-08-12 01:27:41

标签: ios uigesturerecognizer scenekit

有没有办法在SceneKit中捕捉单个网格或真正SCNNode的触摸(触地,修饰等)?

3 个答案:

答案 0 :(得分:3)

答案在SceneKit游戏模板中......:^) 在handleTap:中,有一个关于如何使用hitTest:options:的例子。

答案 1 :(得分:1)

如果您在Xcode中打开默认的SceneKit游戏模板,您将看到允许您识别节点是否被触摸的代码。在viewDidLoad中编写以下代码......

UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(customMehtod:)];
NSMutableArray *gestureRecognizers = [NSMutableArray array];
[gestureRecognizers addObject:tapGesture];
[gestureRecognizers addObjectsFromArray:scnView.gestureRecognizers];
scnView.gestureRecognizers = gestureRecognizers;

现在使用以下代码创建自定义方法:

-(void)boardTapped:(UIGestureRecognizer*)gestureRecognize
{

 // check what nodes are tapped
CGPoint p = [gestureRecognize locationInView:scnView];
NSArray *hitResults = [scnView hitTest:p options:nil];

if([hitResults count] > 0){
    SCNHitTestResult *result = [hitResults objectAtIndex:0];
    if(result.node == myNode){
       //do something...
    }
}

就是这样!在if语句中放置您想要的任何节点:if(result.node == myNode)。

答案 2 :(得分:-2)

使用持续时间非常短的longPress手势最好实现touchDown,除非您想要覆盖触摸。

之前回答:UITapGestureRecognizer - make it work on touch down, not touch up?

一旦你抓住水龙头的x / y位置并点击它就会进行命中测试。 (请参阅Xcode样板代码)