2014-10-24 4 views
0

나는 "bo"라고 불리는 역동적 인 물리 구조와 "leftBumper"라고 불리는 물리 구조를 가지고 있습니다. 충돌이 일어나면 범퍼를 제자리에 유지하고 보가 범퍼에서 튀어 나오게합니다.역동적 인 물리 구조가 내 정적 물리 구조를 통과하는 이유는 무엇입니까?

대신, 충돌 할 때 보가 움직이고 범퍼가 화면에서 날아갑니다. 둘 다 역동적 인 것 같습니다. 여기 내 코드입니다 :

BO :

bo.physicsBody?.dynamic = true 
    bo.physicsBody?.categoryBitMask = boCategory // 3 
    bo.physicsBody?.contactTestBitMask = chainsawCategory // 4 
    bo.physicsBody?.collisionBitMask = noneCategory & bumperCategory 
    addChild(bo) 

BUMPER :

leftBumper.physicsBody?.dynamic = false 
    leftBumper.physicsBody = SKPhysicsBody(rectangleOfSize: leftBumper.size) 
    leftBumper.physicsBody?.categoryBitMask = bumperCategory 
    leftBumper.physicsBody?.collisionBitMask = boCategory 

    leftBumper.zPosition = 10 

    addChild(leftBumper) 

답변

0

이 먹힐되지 않습니다 :

leftBumper.physicsBody?.dynamic = false 
leftBumper.physicsBody = SKPhysicsBody(rectangleOfSize: leftBumper.size) 

당신은 한 번에 플래그를 설정 곳 physicsBody가 nil (또는 이전 몸체)이고 본문의 새 인스턴스를 만들면 기본적으로 dynamic 플래그가 true로 설정됩니다. 먼저 본문을 만든 다음 속성을 변경합니다.

둘째, 비트 마스크를 설정하기 전에 비트 마스크를 설정하지 않은 상태에서 비트 마스크를 설정하십시오. 그들이 어떻게 작동하는지 documentation을 확인해야합니다. 비트 마스크는 종종 오해됩니다.

이 경우 bo와 bumper는 모두 고유 한 범주가 있지만 접촉 이벤트가 발생하지 않으므로 bo의 접촉 비트 마스크가 범퍼가 전혀 사용하지 않는 chainsaw 범주로 설정됩니다. 이 충돌하기를 원한다면 bo는 접촉 및 충돌 비트 마스크에 범퍼 카테고리가 있어야하고 범퍼는 접촉 및 충돌 비트 마스크에 bo 카테고리가 있어야합니다.

+0

사실, 당신의 제안을 시도하고 범퍼에서 bitMasks를 제거하고 그것은 효과가! –