Tom
Tom

Reputation: 1227

How to determine if an object is at rest?

Using the physics helper library.

I'm trying to figure out how I can determine whether a physics object is at rest. Does anyone know how to do this or have any ideas of what I could do?

An example scenario is a bouncy ball that can be picked up and thrown around. I tried creating a timer that times each individual bounce from a collision event with the floor and determines if the object is at rest based off of that but this does not work for if the user slides the ball to the left and right.

Any suggestions?

Upvotes: 2

Views: 2281

Answers (3)

DuckMaestro
DuckMaestro

Reputation: 15885

If you have runtime access to the underlying Farseer Body, then you also should have access to the property LinearVelocity, which you can check for 0 magnitude.

Upvotes: 2

Tom
Tom

Reputation: 1227

So far I've came up with a simple method. Creating two class variables (Vector2 currentPosition, Vector2 previousPosition) and then creating a dispatcher timer that ticks every so often and using the following tick method:

void bounceTimer_Tick(object sender, EventArgs e)
    {
        currentPosition = ball.Position;

            if (currentPosition == previousPosition)
            {
                // Object at rest
            }
            else
            {
               // Object moving
            }
        }

        previousPosition = currentPosition;
    }

There are some issues with it though for example if it captures the balls position in the air coming up and then back down at the same position (very unlikely) and at a very high frequency in ticking it can sometimes capture the same position unexpectedly, at a slow frequency of ticking it takes time to determine if the object is at rest, anyone else have a better method?

Upvotes: 0

Jon Martin
Jon Martin

Reputation: 3392

This is pretty basic stuff. Your physics object should be an instance of some kind of class which contains information on the object's position, velocity, etc etc. At any given time, you should be able to check the speed of the object, and obviously if its speed == 0, it is at rest.

Upvotes: 1

Related Questions