Распознать, щелкнули ли объект в SceneKit

Я хочу сделать игру с помощью scenekit для ios. Я начал с шаблона SceneKit, который дает нам Xcode (вращающийся самолет). Там уже был метод handleTap для распознавания касания экрана пользователем. Я хочу создать SCNBox и распознавать, нажимает ли на него пользователь, но я не понимаю, как работает handleTap. Нужно ли добавлять геометрию коробки в handleTap? Может кто-нибудь, пожалуйста, покажите мне, как бы вы разместили поле в центре экрана, чтобы распознать, если на него нажали.

Вот код handleTap:

- (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];

      // get its material
      SCNMaterial *material = result.node.geometry.firstMaterial;

      // highlight it
      //[SCNTransaction begin];
      //[SCNTransaction setAnimationDuration:0.5];

      // on completion - unhighlight
      [SCNTransaction setCompletionBlock:^{
          [SCNTransaction begin];
          [SCNTransaction setAnimationDuration:0.5];

          material.emission.contents = [UIColor blackColor];

          [SCNTransaction commit];
      }];

      material.emission.contents = [UIColor redColor];

  [SCNTransaction commit];
  }
}

person Harshil.Chokshi    schedule 21.03.2016    source источник


Ответы (1)


шаблон ищет только материал:

SCNMaterial *material = result.node.geometry.firstMaterial;

вы захотите проверить узел результата:

if (result.node == _boxNode) { ... }
person mnuages    schedule 21.03.2016
comment
Что такое результат.узел? - person Harshil.Chokshi; 21.03.2016
comment
ну, в шаблоне у вас есть SCNHitTestResult *result = [hitResults objectAtIndex:0];, а node - это просто свойство на SCNHitTestResult - person mnuages; 21.03.2016
comment
Так что мне нужно вызвать новый метод дескриптора, или я могу просто реализовать оператор if внутри метода - person Harshil.Chokshi; 21.03.2016