2012-01-12 6 views
0

Box2DFlash의 직접 포트 인 Box2DWeb 2.1a를 사용하고 있습니다.동시 충돌이있는 Box2D 충돌 필터링

범주 및 마스크 비트를 설정하여 연락처 필터 (b2FilterData)를 사용하고 있습니다. 이것은 부분적으로 작동하지만, 내가 기대하지 않은 자극적 인 행동이 있습니다. 충돌을 일으키지 않아야하는 항목이 충돌해야하는 다른 물체와도 접촉하면이 물체도 서로 충돌합니다. 나는 이것을 원하지 않지만 그것을 없애는 방법을 찾을 수는 없다.

b2ContactFilter.prototype.ShouldCollide 메서드의 정확한 복사본 인 ShouldCollide 메서드로 b2ContactFilter를 만들었습니다. 접촉시 범주 및 마스크 비트의 값을 인쇄 할 수 있습니다. 잘못된 충돌이 발생하면 filter1.categoryBits 및 filter1.maskBits가 각각 0x0001 및 0x65535가된다는 것을 알게되었습니다. 이는 b2FilterData가 새 인스턴스이거나 b2Body에 새 b2FixtureDef 인스턴스가 할당 된 것과 같습니다. 나는 이것이 왜 일어 났는지 모르겠다.

+0

전체 코드를 공유 할 수 있습니까 ?? – Shekhar

답변

0

b2FilterData를 올바르게 지정 하시겠습니까? b2FixtureDef가 아닌 b2Fixture에 적용되어야합니다. 당신이하고있는 경우

var myData = new b2FilterData(); 
myData.maskBits = ~0x0004; 

fixture.m_filter = myData; 

대신보십시오 :

fixture.SetFilterData(myData); 

당신이 당신이 b2Fixture에 있지만 잘못 대신 b2FixtureDef, 그것을 호출하지 않는 것을 의미 SetFilterData를 호출 오류가 발생하는 경우.

도움이 되었습니까?

+0

서로 다른 레이어에 오브젝트를 놓으면 어떻게 서로 충돌하지 않지만 땅과 충돌합니까? –

+0

@WorstForum 새로운 질문입니다. 네가 묻는다면 내가 너에게 대답 할 수있어. –

+0

Box2D Web에 관한 문서가 완전히 부족함에도 불구하고 나는 그것을 풀어 냈습니다. 그러나 나는 두 도형의 50 % 모프를 찾는 방법을 찾기 위해 머리카락을 꺼내므로 정확한 평균 - 각도/정점 사용. –