2014-10-11 2 views
0

중간에 두 개의 원이있는 플랫폼이 하나 있습니다.SpriteKit - 여러 객체의 접촉 감지

상단에 원이 1 개 있습니다. 아래쪽에 하나의 원이 있습니다.

아래쪽 원이 화면 상단에 닿으면 NSLog 메시지를 쓰고 싶습니다.

위쪽 원이 화면 하단에 닿으면 NSLog 메시지를 쓰고 싶습니다.

circle1과 2가 categorybitmasks와 contactTestBitMasks를 갖도록 설정했습니다. 내가하는 모든 테스트는 상단 또는 하단 원이 화면 하단을 칠 때만 찾을 수 있지만 하단 원이 상단을 터치 한 시점을 감지하는 방법을 찾지 못합니다. 내 if 문을 시작했습니다.

-(void)didBeginContact:(SKPhysicsContact *)contact { 
// If the top circle touches the bottom edge 
if (contact.bodyA.categoryBitMask == bottomEdgeCategory) { 
    NSLog(@"This is the top ball touching the bottom edge"); 
} 
} 

모든 도움을 주시면 감사하겠습니다.

+0

가능한 복제본 [Swift ClassCastException - SKPhysicsBody.node -> SKLabelNode. 왜?] (http://stackoverflow.com/questions/26316484/swift-classcastexception-when-skphysicsbody-node-sklabelnode-why) – rickster

+0

중복 질문보기 : SpriteKit는 연락처를 임의의 순서로보고하므로 'bodyA'또는 ' bodyB'가 아래쪽 가장자리 일 수 있습니다. 또한 Starscream을 조심하십시오. – rickster

+0

나는 그것을 보았고, 불행하게도이 시나리오에서 나와 답변을 제공하지 않는다 (그렇지 않으면 나는 게시하지 않을 것이다). 내가 혼란스럽게 생각하는 것은 두 개의 원과 두 개의 가장자리를 갖는 것이다. 어느 게 어느 건지? 어떻게 연락 할 수 있습니까? – MegaTron

답변

1

스프라이트 키트를 처음 사용하는 경우 충돌 감지에 대한 다음 자습서를 읽으십시오.

하나의 스프라이트가 다른 스프라이트와 접촉하는 코드를 보여줍니다. 화면 위쪽에 얇은 사각형 스프라이트를 만들고 아래쪽에 다른 사각형 스프라이트를 만듭니다. 서로 다른 접촉 비트 마스크를 지정하십시오. 다음 자습서의 코드를 사용하여 topOfScreenSprite 및 bottomOfScreenSprite를 치기위한 연락처 이벤트를 추가합니다.

http://www.raywenderlich.com/42699/spritekit-tutorial-for-beginners

내 원하는 버전 :

- (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==circle1Category && secondBody.categoryBitMask == topOfScreenCategory) 
    { 
     NSLog('c1: Top Hit'); 
    } 
    else if (firstBody.categoryBitMask==circle1Category && secondBody.categoryBitMask == bottomOfScreenCategory) 
    { 
     NSLog('c1: Bottom Hit'); 
    }  
    if (firstBody.categoryBitMask==circle2Category && secondBody.categoryBitMask == topOfScreenCategory) 
    { 
     NSLog('c2: Top Hit'); 
    } 
    else if (firstBody.categoryBitMask==circle2Category && secondBody.categoryBitMask == bottomOfScreenCategory) 
    { 
     NSLog('c2: Bottom Hit'); 
    } 
} 

참고 : firstBody 항상 할당 된 낮은 값을 갖는 카테고리 될 것입니다.

+0

Meisernman - 시간을내어 철저히 대답 해 주셔서 감사합니다. :) – MegaTron

+0

내 기쁨. 나는 밖으로 시작하는 것을 기억합니다 ... 일단 당신이 접촉과 충돌의 매달림을 얻으면 당신의 가능성은 끝이 없습니다. 날 믿어, 기본적으로 그 시점에 :) 그것은 훨씬 더 복잡하지 않습니다. – meisenman