1

有没有办法在 SceneKit 中捕捉单个网格的触摸(触地、触地等),或者真的SCNNode是 s?

4

3 回答 3

3

答案在 SceneKit 游戏模板中... :^) 在 handleTap: 中,有一个示例说明如何使用hitTest:options:which is the way to go。

于 2014-08-12T03:41:54.973 回答
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)。

于 2016-03-31T20:52:48.843 回答
-2

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

之前回答过:UITapGestureRecognizer - 让它在触地时工作,而不是触地?

一旦你抓住水龙头的 x/y 位置并 hitTest 它,命中测试就会起作用。(请参阅 Xcode 样板代码)

于 2015-04-10T15:40:30.037 回答