2014-04-21 7 views
0

SpriteKit을 사용하여 게임을 만들고 충돌 감지에 문제가 발생했습니다. SKSpriteNode, PlayerEnemy의 2 개의 하위 클래스가 있습니다. 그들은 서로 충돌을 감지해야합니다. 여기에 내가 Player 객체의 physicsBody 초기화하고 방법은 다음과 같습니다Spritekit 충돌 감지가 제대로 작동하지 않습니다.

self.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:self.size]; 
self.physicsBody.affectedByGravity = NO; 
self.physicsBody.dynamic = NO; 
self.physicsBody.usesPreciseCollisionDetection = YES; 
self.physicsBody.categoryBitMask = playerCategory; 
self.physicsBody.collisionBitMask = enemyCategory; 
self.physicsBody.contactTestBitMask = enemyCategory; 

을 그리고 여기가 Enemy 객체의 physicsBody 초기화하고 방법은 다음과 같습니다

self.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:self.size]; 
self.physicsBody.affectedByGravity = NO; 
self.physicsBody.dynamic = NO; 
self.physicsBody.usesPreciseCollisionDetection = NO; 
self.physicsBody.categoryBitMask = enemyCategory; 
self.physicsBody.collisionBitMask = playerCategory; 
self.physicsBody.contactTestBitMask = playerCategory; 

GameScene 구현 SKPhysicsContactDelegate 프로토콜을 가지고 있고 나는 그것의 INIT이이 :

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

그리고 아직까지 didBeginContact 메서드를 호출해야합니다. 객체가 씬에서 생성 된 후에도 아무것도 생성하지 않은 후에 physicsBodies을 초기화하려고했습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

UPDATE 1

여기가 Prefix.pch 파일에 수입되는 Common.h 파일에의의 bitMasks를 만드는 코드입니다.

static const uint32_t enemyCategory = 0x1 <<0; 
static const uint32_t playerCategory = 0x1 <<1; 
+0

어디에서 어떻게 비트 마스크 범주 값을 설정 했습니까? 관련 코드를 게시하십시오. – ZeMoon

+0

@akashg 질문을 편집했습니다. –

+3

동적 속성을 YES로 설정하십시오. – ZeMoon

답변

1

노드에 physicsBody.dynamic을 YES로 설정해야합니다. SKPhysicsBody 클래스 참조 가입일

: 물리 체가 물리 시뮬레이션에 의해 이동 여부를 나타내는

동적

부울 값.

기본값은 YES입니다. 값이 NO이면 물리학 자 본문 에 적용되는 모든 힘과 충격이 무시됩니다.

관련 문제