2016-03-21 18 views
0

ios için scenekit kullanarak oyun oynamak istiyorum. SceneKit şablonuyla başladım Xcode bize (dönen bir uçak) veriyor. Kullanıcının ekranda göz atıp takmadığını anlamak için zaten bir tane de HandleTap yöntemi sağlanmıştır. Ben bir SCNBox yapmak ve kullanıcı üzerinde musluk olup olmadığını bilmek istiyorum, ancak handleTap nasıl çalıştığını karıştırıyorum. Kutu geometrisini handleTap'a eklemem gerekir mi? Birisi ekranın ortasına nasıl tıklanıp tıklanmadığını fark edebilecek bir kutuya nasıl sahip olabileceğinizi gösterir. İşte SceneKit'teki nesne tıklandığında Recgnize

handleTap kodudur:

şablonu yalnızca malzeme arar
- (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]; 
    } 
} 

cevap

0

:

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

nedir:

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

Eğer sonucun düğüme karşı kontrol etmek isteyeceksiniz result.node? –

+0

da, şablonda 'SCNHitTestResult * sonucu var = [hitResults objectAtIndex: 0]; 've' node 'sadece SCNHitTestResult' – mnuages

+0

' da bir özelliktir. Bu yüzden yeni bir tanıtıcı yöntemini çağırmam gerekiyor mu, yoksa sadece uygulayabilir miyim yöntemde if ifadesi –