2012-06-04 14 views
8

Używam box2dweb. Próbuję stworzyć grę. W pewnym momencie muszę znaleźć punkt kontaktowy między "okręgiem" a "pudełkiem". Wiem tylko, że można to zrobić za pomocą b2ContactListener. Możemy uzyskać dane kontaktowe poprzez wdrożenie b2ContactListener przy użyciu Post-Solve Event. Proszę pomóż!Box2dweb - Punkt kontaktowy kolizji

+1

To może pomóc: http://www.iforce2d.net/b2dtut/collision-anatomy – iforce2d

Odpowiedz

16

Jesteś na dobrej drodze są różne imprezy można podłączyć język z b2ContactListener:

var b2Listener = Box2D.Dynamics.b2ContactListener; 

//Add listeners for contact 
var listener = new b2Listener; 

listener.BeginContact = function(contact) { 
    //console.log(contact.GetFixtureA().GetBody().GetUserData()); 
} 

listener.EndContact = function(contact) { 
    // console.log(contact.GetFixtureA().GetBody().GetUserData()); 
} 

listener.PostSolve = function(contact, impulse) { 
    if (contact.GetFixtureA().GetBody().GetUserData() == 'ball' || contact.GetFixtureB().GetBody().GetUserData() == 'ball') { 
     var impulse = impulse.normalImpulses[0]; 
     if (impulse < 0.2) return; //threshold ignore small impacts 
     world.ball.impulse = impulse > 0.6 ? 0.5 : impulse; 
     console.log(world.ball.impulse); 
    } 
} 

listener.PreSolve = function(contact, oldManifold) { 
    // PreSolve 
} 

this.world.SetContactListener(listener); 

prostu usunąć kod postSolve iw zależności od tego, co trzeba zrobić, hak do odpowiednich zdarzeń.

Seth ladd ma kilka świetnych artykułów na swoim blogu na temat kolizji/reagowania na nie. To tutaj podniosłem te bity, więc kredyt trafia do niego.

Mam nadzieję, że to pomoże.

Dzięki Gary

+0

Dzięki człowiekiem. Teraz mogę również uzyskać dokładne dane kontaktowe. – Shekhar

+0

Napisałem na tym blogu. Jeśli chcesz, możesz to sprawdzić. http://thenightowl.xp3.biz/ – Shekhar

+0

Wreszcie! Wyjaśnienie CollisionHandler w Javscript –

Powiązane problemy