2014-11-15 2 views
0

두 개체 간의 충돌을 탐지하기 위해 Sprite Kit를 사용합니다. 다음은 내가 비트 마스크를 정의하는 방법이다.SkSpriteNode 충돌이 감지되지 않음

static const uint32_t puffinCategory = 0x1 << 0; 
static const uint32_t planeCategory = 0x1 << 1; 

여기에 puffins 및 planes physics body 설정 방법에 대한 코드가 있습니다. 비행기 여기

SKSpriteNode *planeSpriteNode = [[SKSpriteNode alloc]initWithImageNamed:planeStringFileName]; 
planeSpriteNode.position = CGPointMake(0, self.view.frame.size.height*-1); 
planeSpriteNode.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:planeSpriteNode.size]; 
planeSpriteNode.physicsBody.usesPreciseCollisionDetection = YES; 
planeSpriteNode.physicsBody.categoryBitMask = planeCategory; 
planeSpriteNode.physicsBody.dynamic = NO; 
planeSpriteNode.physicsBody.collisionBitMask = puffinCategory; 
planeSpriteNode.physicsBody.contactTestBitMask = puffinCategory; 

를 들어 퍼핀

SKSpriteNode *PuffinNode = [[SKSpriteNode alloc]initWithImageNamed:@"puffin"]; 
    PuffinNode.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:PuffinNode.size]; 
    PuffinNode.physicsBody.usesPreciseCollisionDetection = YES; 
    PuffinNode.physicsBody.categoryBitMask = puffinCategory; 
    PuffinNode.physicsBody.dynamic = NO; 
    PuffinNode.physicsBody.collisionBitMask = puffinCategory; 
    PuffinNode.physicsBody.contactTestBitMask = planeCategory; 


    [PuffinNode setZPosition:1.5]; 

를 들어 대리자 방법 didBeginContact의 내 구현 :

-(void)didBeginContact:(SKPhysicsContact *)contact{ 
    NSLog(@"collission method run"); 
    SKPhysicsBody *firstBody, *secondBody; 
    if (contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask){ 
     firstBody = contact.bodyA; 
     secondBody = contact.bodyB; 
    }else{ 
     firstBody = contact.bodyB; 
     secondBody = contact.bodyA; 
    } 

    if ((firstBody.categoryBitMask & puffinCategory) != 0 && (secondBody.categoryBitMask & planeCategory) != 0){ 
     NSLog(@"collission occured"); 
    } 
} 

임 호출 될 경우, 메소드 로깅가 표시되지 않으며, 내가 할 두 스프라이트가 충돌 할 때 로그를보십시오.

1) 했 당신이 설정 :

+0

'SKScene'의'physicsWorld.contactDelegate'를 설정하는 것을 잊지 않았습니까? –

+0

didMoveToView 메서드 내에서 수행됩니다. – TheM00s3

답변

2

당신은, 적어도 하나의

0

일부 문제 동적이어야한다 충돌 할 수

PuffinNode.physicsBody.dynamic = NO; 

planeSpriteNode.physicsBody.dynamic = NO; 

두 개의 정적 몸 설정 SKScene의 physicsWorld.contactDelegate? 2) 두 노드 모두 동적이지 않습니다. 물리 세계에서 상호 작용하기를 원한다면 물리 법칙에 따라야합니다. 그 중 하나는 적어도 동적이어야합니다. 3) collisionBitMask이 제대로 설정되지 않았습니다.

관련 문제