Detecting collisions

Topics: User Forum
Nov 9, 2009 at 7:56 AM

Hello,

I'm trying to use Farseer for detecting collisions. I mean I don't want to deal with gravity or anything.

 

I wrote code:

 

        public void Do()
        {
            PhysicsSimulator physicsSimulator;
            physicsSimulator = new PhysicsSimulator();

            Body boxBody1;
            Geom boxGeom1;

            boxBody1 = BodyFactory.Instance.CreateRectangleBody(physicsSimulator, 100, 100, 1);

            boxBody1.Position = new FarseerGames.FarseerPhysics.Mathematics.Vector2(50, 50);
            boxBody1.IsStatic = true;

            boxGeom1 = GeomFactory.Instance.CreateRectangleGeom(physicsSimulator, boxBody1, 100, 100);
            boxGeom1.IsSensor = true;
            boxGeom1.OnCollision = new CollisionEventHandler(Collided);
            boxGeom1.CollisionResponseEnabled = false;

            /*
            Body boxBody2;
            Geom boxGeom2;

            boxBody2 = BodyFactory.Instance.CreateRectangleBody(physicsSimulator, 100, 100, 1);
            boxBody2.Position = new FarseerGames.FarseerPhysics.Mathematics.Vector2(0, 0);

            boxGeom2 = GeomFactory.Instance.CreateRectangleGeom(physicsSimulator, boxBody2, 100, 100);
            */
 
            Body polyBody1;
            Geom polyGeom1;
            
            Vertices vertices = new Vertices(new Vector2[] { 
                new Vector2(-50f, -50f), 
                new Vector2(-50f, 50f), 
                new Vector2(50f, 50f), 
                new Vector2(50f, -50f)});

            polyBody1 = BodyFactory.Instance.CreatePolygonBody(physicsSimulator, vertices, 1f);
            polyGeom1 = GeomFactory.Instance.CreatePolygonGeom(polyBody1, vertices, 0f);
            

            physicsSimulator.Update(1f);
        }

        public bool Collided(Geom geometry1, Geom geometry2, ContactList contactList)
        {
            Console.WriteLine("Collided");
            return true;
        }

 

 

It works with two rectangles (I have commented that section). But when I try to use polygon, it never goes to Collided-method.
Nov 9, 2009 at 12:49 PM

Change the line that says

polyGeom1 = GeomFactory.Instance.CreatePolygonGeom(polyBody1, vertices, 0f);

to

polyGeom1 = GeomFactory.Instance.CreatePolygonGeom(physicsSimulator, polyBody1, vertices, 0f);


Nov 9, 2009 at 2:23 PM

Ok, thank you for your response.

Mine problems is that I need to collide geometries to specified direction. With collide I mean moving until collision with another geometry. 

I've been trying to move geometry by setting Position-property of body-object and also tried setting LinearVelocity-property for geom. I'm sure Farseer can solve my problem. But I just can't figure it how would I do it..

Here's a picture of my problem:

 

 

Free Image Hosting at www.ImageShack.us

Nov 10, 2009 at 8:40 AM

To move bodies around, you should use methods such as ApplyForce() or ApplyImpulse() rather than changing the position manually. After a force is applied, Farseer will then continue the motion for subsequent frames.