2014-12-16 4 views
1

스프라이트 키트에서 게임을 만드는 튜토리얼/수업을 진행하고 있으며 여러 충돌이 동시에 발생하는 문제가 있습니다.스프라이트 키트 다중 충돌

속도가 너무 낮고 각도가 너무 좁은 경우 물체가 몸에 "달라 붙을"수있는 알려진 문제가 있기 때문에 공을 튀게하는 모든 충돌에 대해 didBeginContact : 메소드를 구현합니다.

제작시 _ball.physicsBody.collisionBitMask = 0; 나는 개체의 바운스를 자연스럽게 할 수 및 작동

didBeginContact

if(other body == firstbody && _ball == secondbody) 
secondBody.velocity = (CGVectorMake(secondBody.velocity.dx * -1.0, secondBody.velocity.dy)); 

(수직 충돌 또는 DY의 *의 -1.0)에서

과 아래 라인을 넣어.

내가 겪고있는 문제는 _ball에 연락처가 여러 개있을 때 발생합니다. 1 개의 콜리 전이 _ball이 방향을 반대로하고 방향을 다시 바꿔 놓은 같은 유형의 다른 오브젝트를 때리면 _ball이 원본 방향으로 계속 이동합니다 (Double Negative). _ball은 이러한 오브젝트를 통해 이동합니다. 나는 그것을 다시 반송 할 수있다. secondBody.categoryBitMask = 0; 하지만 그때 나는 원래 카테고리에 _ball을 반환하는 문제가 있습니다.

연락처를 한 번 처리 한 후 연락처를 통해 순환하거나 본문의 연락처를 중지 한 경우 누구에게 알 수 있습니까?

의견이 있으십니까?

+0

는 "나는 didBeginContact 전화 해요 : 방법을"희망이 도움이 <- 당신은 그 방법을 직접 전화를 안하고, 그것은 두 물체가 충돌 할 때마다 프레임 워크에 의해 전송됩니다. – LearnCocos2D

+0

미안하지만 "전화하기"란 뜻이 아닙니다. – user3277892

답변

0

정확한 충돌 양에 많은 문제가있었습니다. 때로는 하나가 될 수도 있고 때로는 그렇지 않을 수도 있습니다. 그래서 이것을 시도하고 작동합니다. 변경할 유일한 것은 didBeginContact 메소드입니다.

정확하게 물리 대리자를 구현 한 것과 같은 범주를 선언했다고 가정합니다. 따라서 :

//define collision categories on the top of implementation file 
static const uint32_t category1 = 0x1 << 0; 
static const uint32_t category2 = 0x1 << 1; 
static const uint32_t category3 = 0x1 << 2; 

didBeginContact에서 코드를이 코드로 바꿔보십시오. 나는 이것을 한 후에 올바른 충돌이 마침내 작동한다는 것을 기억합니다.

-(void)didBeginContact:(SKPhysicsContact *)contact 
{ 

    SKNode *newFirstBody = contact.bodyA.node; 
    SKNode *newSecondBody = contact.bodyB.node; 

    uint32_t collision = newFirstBody.physicsBody.categoryBitMask | newSecondBody.physicsBody.categoryBitMask; 

if (collision == (category1 | category2)) 
{ 
    NSLog(@"hit"); 
} 

} 

관련 문제