有没有办法在SceneKit中捕捉单个网格或真正SCNNode
的触摸(触地,修饰等)?
答案 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样板代码)