2014-04-03 189 views
0

我有兩個精靈,我的玩家和一個碰撞的牆(來自一個地圖)。下面我粘貼代碼爲球員和牆壁碰撞未被檢測到

Player.m 
    - (instancetype)init { 
     SKTextureAtlas *atlas = 
     [SKTextureAtlas atlasNamed: @"char"]; 
     SKTexture *texture = [atlas textureNamed:@"player"]; texture.filteringMode = SKTextureFilteringNearest; 
     if (self = [super initWithTexture:texture]) 
     { self.name = @"player"; 
      CGFloat minDiam = MIN(self.size.width, self.size.height); 
      minDiam = MAX(minDiam-16, 4); 
      self.physicsBody = 
      [SKPhysicsBody bodyWithCircleOfRadius:minDiam/2.0]; 
      self.physicsBody.categoryBitMask=PCPlayerCategory;  
      self.physicsBody.collisionBitMask = 
      PCWallCategory; 
      self.physicsBody.allowsRotation = NO; 
      self.physicsBody.restitution = 0; 
      self.physicsBody.friction = 0; 
      self.physicsBody.linearDamping = 0; 
     } 
     return self; 
    } 

tilemap.m

 SKSpriteNode *tile = [layer tileAtCoord:coord]; 
     [email protected]"wall"; 
     tile.physicsBody = 
     [SKPhysicsBody bodyWithRectangleOfSize:tile.size]; 
     tile.physicsBody.categoryBitMask = PCWallCategory; 
      tile.physicsBody.collisionBitMask = 
      PCPlayerCategory; 
     tile.physicsBody.dynamic = NO; 
     tile.physicsBody.friction = 0; 
      tile.physicsBody.restitution=0; 

在我mainscene.m

- (void)didBeginContact:(SKPhysicsContact *)contact { 
    uint32_t collision = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask); 
    if (collision == (PCWallCategory|PCPlayerCategory)) { 
    NSLog(@"SUCCESS"); } 

然而,即使我的球員坐在我牆我沒有看到NSLog顯示,希望得到一些幫助和洞察到這個請。 謝謝

- (void)didBeginContact:(SKPhysicsContact *)contact { 
    uint32_t collision = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask); 
    if (collision == (PCWallCategory|PCPlayerCategory)) { 

    NSLog(@"SUCCESS"); 
    onGround=YES; 
    }else 
    { 
    onGround=NO; 
    } 

} 
+1

不正確使用的categoryBitMask ... http://stackoverflow.com/a/22804376/201863 – LearnCocos2D

+1

取而代之的是collisionBitMask的,你需要使用相同的值設置contactTestBitMask。 – ZeMoon

+0

@ LearnCocos2D感謝您的閱讀,它解決了我的問題 –

回答

0

collisionTestBitMask只定義了哪些類型的機構可以與physicsBody碰撞。爲了在兩個物體碰撞時觸發聯繫人委託,您需要設置contactTestBitMask

所以,physicsBody應該這樣定義:

self.physicsBody.categoryBitMask=PCPlayerCategory;  
self.physicsBody.contactTestBitMask = PCWallCategory;