2012-06-04 24 views
8

Uso box2dweb. Estoy tratando de desarrollar un juego. En algún momento necesito averiguar el punto de contacto entre un "Círculo" y "Caja". Todo lo que sé es que se puede hacer usando b2ContactListener. Podemos recibir datos de contacto implementando b2ContactListener usando Post-Solve Event. ¡Por favor ayuda!Box2dweb - Punto de contacto de colisión

+1

Esto podría ayudar: http://www.iforce2d.net/b2dtut/collision-anatomy – iforce2d

Respuesta

16

Está en el buen camino hay varios eventos que se pueden enganchar en la 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); 

Basta con retirar el código postSolve y dependiendo de lo que tiene que hacer gancho en los eventos adecuados.

Seth ladd tiene excelentes artículos en su blog sobre colisión/reacción a ellos. Aquí es donde recogí estos bits, así que el crédito total recae en él.

Espero que esto ayude.

Gracias, Gary

+0

Gracias hombre. Ahora también puedo obtener los puntos de contacto exactos. – Shekhar

+0

Escribí un blog sobre él. Si lo deseas, puedes verificarlo. http://thenightowl.xp3.biz/ – Shekhar

+0

¡Finalmente! Explicación de CollisionHandler en Javscript –

Cuestiones relacionadas