두 개체 간의 충돌을 탐지하기 위해 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) 했 당신이 설정 :
'SKScene'의'physicsWorld.contactDelegate'를 설정하는 것을 잊지 않았습니까? –
didMoveToView 메서드 내에서 수행됩니다. – TheM00s3