2016-03-21 5 views
0

Ich möchte ein Spiel mit Scenekit für iOS machen. Ich habe mit der SceneKit-Vorlage begonnen, die Xcode uns gibt (ein rotierendes Flugzeug). Dort ist bereits die Methode handleTap vorgesehen, um zu erkennen, ob der Benutzer auf den Bildschirm getippt hat. Ich möchte eine SCNBox erstellen und erkennen, ob der Benutzer darauf klickt, aber ich bin verwirrt, wie handleTap funktioniert. Muss ich die Box-Geometrie in handleTap hinzufügen? Kann mir bitte jemand zeigen, wie Sie eine Box in der Mitte des Bildschirms platzieren können, die erkennen kann, ob sie angeklickt wurde.Recgnize wenn Objekt in SceneKit angeklickt wurde

Hier handleTap Code:

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

Antwort

0

die Vorlage nur für das Material aussieht:

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

Sie werden gegen das Ergebnis der Knoten überprüfen möchten:

if (result.node == _boxNode) { ... } 
+0

Was ist result.node? –

+0

Nun, in der Vorlage haben Sie 'SCNHitTestResult * result = [hitResults objectAtIndex: 0];' und 'node' ist nur eine Eigenschaft auf' SCNHitTestResult ' – mnuages

+0

Also muss ich eine neue Handle-Methode aufrufen, oder kann ich einfach implementieren die if-Anweisung in der Methode –