2014-06-17 25 views
1

我正在嘗試創建一個塊可以移動的遊戲,它們都屬於同一個categoryBitMask。除非將physicsBody設置爲動態,否則didBeginContact不會觸發。如何檢測屬於同一類別的兩個塊之間的碰撞?SpriteKit didBegin與2個非動態物體的聯繫問題

生成塊代碼:

float blkX = 34; 
    float blkY = 64; 

    for (int i = 0; i < 4; i++) { 
     for (int j = 0; j < 6; j++){ 
      block = [SKSpriteNode spriteNodeWithImageNamed:blocksArray[(arc4random()%5)]]; 
      block.position = CGPointMake(blkX, blkY); 
      block.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:block.size]; 
      block.physicsBody.usesPreciseCollisionDetection = YES; 
      block.physicsBody.dynamic = NO; 
      block.physicsBody.categoryBitMask = blockCategory; 
      block.physicsBody.contactTestBitMask = blockCategory; 
      block.physicsBody.collisionBitMask = blockCategory; 
      [block setName:@"block"]; 
      [_bgLayer addChild:block]; 
      blkX += 48; 
     } 
     blkX = 34; 
     blkY += 48; 
    } 

我使用的SKPhysicsContactDelegate並具有以下在我的init()方法的兩行:

self.physicsWorld.contactDelegate = self; 
self.physicsWorld.gravity = CGVectorMake(0.0, 0.0); 

我didBeginContact方法:

-(void)didBeginContact:(SKPhysicsContact *)contact{ 
SKPhysicsBody *firstBody, *secondBody; 

firstBody = contact.bodyA; 
secondBody = contact.bodyB; 

NSLog(@"We Collided!"); 

}

任何幫助表示讚賞。謝謝!

+1

兩個非動態物體永遠不會產生接觸事件。既然你已經知道了這一點,並從你的評論我認爲它的工作,我想知道你的問題是什麼? – LearnCocos2D

回答

1

我拿出東西,它對於那些在類似的情況下工作:

在我設定的塊我的touchesBegan方法的移動是動態的,其不火didBeginContact。這裏是我的touchesBegan方法:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    self.selectedNode = [self nodeAtPoint:[[touches anyObject] locationInNode:self]]; 
    [self.selectedNode.physicsBody setDynamic:YES]; 
} 

然後在touchesEnded方法中再次關閉它。

我還設置了block.physicsBody.collisionBitMask = 0,它允許塊在其他塊中移動。如果這有助於至少一個其他人,那麼值得問這個問題!