2014-09-29 2 views
1

나는 Flappy Bird Style 게임을 만드는 SpriteKit 자습서를 살펴 보았습니다. 내가 겪고있는 문제 중 하나는 충돌 감지 코드가 잘못 발사되었다는 것입니다.여러 충돌을 잘못 감지하는 SpriteKit

가끔은 완벽 해집니다 ... 땅에 부딪 쳤고, 땅에 충돌했을 때의 방법을 사용합니다. 그러나, 무작위로 보이는 시간에, 그것은 땅에 부딪칠 것이고, 지상 충돌을위한 방법을 2-6 번 정도 발사 할 것입니다. 화면에 다른 노드가 있는지 여부는 중요하지 않습니다. 나는 앉아서 즉시 떨어 뜨릴 수 있고 때로는 충돌 코드가 올바르게 실행되고 때로는 여러 번 실행됩니다. 이 코드에서 문제가 발생 했습니까?

업데이트 : 두 개체가 여러 개의 교차점에서 만나는 지점 인 것으로 보입니다. 오브젝트 A가 오브젝트 B와 3 점으로 교차하면 3 번 발사됩니다. 당신이 이것을 어떻게 지키지 않습니까?

- (void)didBeginContact:(SKPhysicsContact *)contact 
{ 
    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 & pillerCategory) != 0 && 
     (secondBody.categoryBitMask & flappyBirdCategory) != 0) 
    { 
     [self pillar:(SKSpriteNode *) firstBody.node didCollideWithBird:(SKSpriteNode *) secondBody.node]; 
    } 
    else if ((firstBody.categoryBitMask & flappyBirdCategory) != 0 && 
      (secondBody.categoryBitMask & bottomBackgroundCategory) != 0) 
    { 
     [self flappyBird:(SKSpriteNode *)firstBody.node didCollideWithBottomScoller:(SKSpriteNode *)secondBody.node]; 
    } 
} 
- (void)pillar:(SKSpriteNode *)pillar didCollideWithBird:(SKSpriteNode *)bird 
{ 
    NSLog(@"Did collide with bird"); 
    [self showGameOverLayer]; 
} 

- (void)flappyBird:(SKSpriteNode *)bird didCollideWithBottomScoller:(SKSpriteNode *)bottomBackground 
{ 
    NSLog(@"Did collide with scroller"); 

    [self showGameOverLayer]; 
} 
+0

개체가 충돌하지 않도록 충돌 비트를 설정 했습니까? 아마도 스프라이트가 땅바닥에 튀어 오를 수도 있습니다. – 0x141E

+0

아래쪽 스크롤러가 반복되는 것처럼 보이며, 노드가 떨어지면 원래 이미지와 다른 이미지가 충돌하여 두 개의 충돌이 발생합니다. – user717452

답변

1

가장 쉬운 방법은이 문제를 해결하는 것입니다.

첫 번째 실행이라는 BOOL을 만듭니다.

BOOL running; 

지금처럼 충돌 코드 주위 문,

if(running == YES) 
{ 
    //do collision detection 
} 
else 
{ 
    //do nothing 
} 

또한이 실행을 사용할 수있는 경우 게임이

running = YES; 

3 장소을 시작했을 때 설정은 YES로 실행 2 bool을 사용하여 업데이트 방법과 같은 다양한 유용한 부분을 제어 할 수 있습니다.

관련 문제