2014-04-14 3 views
0

저는 두 객체가 충돌 할 때 어떻게 사용자 정의 함수를 호출 할 수 있는지 아는 사람이 있는지 궁금해서 javascript 및 box2d를 처음 사용했습니다. 나는 어떤 succes도없이 b2ContactListener을 사용하는 몇 가지 예제를 사용하여 시도했다. 나는 다른 객체 위에 놓았고 표준 Box2d 물리학이 그것의 일을하도록했습니다.Box2dWeb 객체가 충돌 할 때 함수 호출

I 두 콘솔 출력을받을 첫번째는 null이고 두 번째는 다음 코드 Ball이다

var listener = new Box2D.Dynamics.b2ContactListener; 
listener.BeginContact = function(contact) { 
    console.log(contact.GetFixtureA().GetBody().GetUserData()); 
    console.log(contact.GetFixtureB().GetBody().GetUserData()); 
};. 

충돌해야하는 두 개의 개체는 b2_dynamicbody (공)이며 b2PolygonShape. (구형). 내 Ball.js에 bodyDef.userData = "Ball";을 사용하고 내 Mouse.js에 bodyDef.userData = "Mouse";을 사용하여 공격을 받았는지 확인하려고합니다. 대신 공만 표시됩니다.

다음은 이것이 충돌을 감지하는 올바른 방법이 아니라고 확신합니다. P 충분히 설명했으면 좋겠습니까 누군가가 올바른 방향으로 나를 조종 할 수 있습니까?

답변

0

좋아, 나는 그것을 해결했다. 분명히 box2d로 만든 세계에 맞춤 이벤트를 추가해야했다. 그래서, 문제는 내가 충돌 그냥 충돌 옆에 다른 뭔가를 가지고 할 수있는 모든 객체에 UserData() 같은 문자열을 추가하는 시작

here:을 찾을 수 있습니다 Box2D의 문서/수동의 큰 덩어리를 읽고 나에 의해 해결되었다. 다음 코드를 사용하십시오.

bodyDef.userData = "Car"; 

참고 : 모든 개체에는 고유 한 문자열이 있어야합니다.

그런 다음 새로운 연락처 수신기를 생성하고 (위 질문에서 공식화) 서로 충돌하는 조명기를 들었습니다. 그런 일이 발생하면 변수에 UserData()이라는 비품을 저장하고, 어떤 객체가 서로 충돌하는지 살펴볼 수 있습니다.

var contactListener = new Box2D.Dynamics.b2ContactListener; 
contactListener.BeginContact = function(contact) { 

    var fixA = contact.GetFixtureA().GetBody().GetUserData(); 
    var fixB = contact.GetFixtureB().GetBody().GetUserData(); 

    // if else statement here... 

}; 

world.SetContactListener(contactListener); 

마지막으로, 나는 그것이 가능한 그것이 내가 추가하는 것을 잊었다 때문에 내 문제가 있었다 충돌, 청취 할 수있어 세계에 이벤트를 추가 할 마지막 문 world.SetContactListener(contactListener);을 추가했다.

누군가가 유용하다고 생각합니다.