如何确定物体是否处于静止状态?

时间:2011-07-24 16:00:12

标签: windows-phone-7 xna physics farseer

使用physics helper库。

我正在试图弄清楚如何确定物理对象是否处于静止状态。有谁知道怎么做或对我能做什么有任何想法?

一个示例场景是一个可以拾取和抛出的弹力球。我尝试创建一个计时器,计时每个人从地板上的碰撞事件反弹,并根据此确定对象是否处于休息状态,但如果用户向左右滑动球,则不起作用。

有什么建议吗?

3 个答案:

答案 0 :(得分:2)

如果您具有对基础Farseer Body的运行时访问权限,那么您还应该可以访问属性LinearVelocity,您可以检查0幅度。

答案 1 :(得分:1)

这是非常基本的东西。你的物理对象应该是某种类的实例,它包含有关对象位置,速度等的信息。在任何给定的时间,你应该能够检查对象的速度,显然它的速度== 0 ,它处于休息状态。

答案 2 :(得分:0)

到目前为止,我想出了一个简单的方法。创建两个类变量(Vector2 currentPosition,Vector2 previousPosition),然后创建一个每隔一段时间勾选一次的调度程序计时器并使用以下tick方法:

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

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

        previousPosition = currentPosition;
    }

虽然它存在一些问题,例如,如果它捕捉到空中的球位置然后在相同的位置(非常不可能)向后退回,并且在非常高的频率下滴答作响,它有时会捕获相同的位置出乎意料的是,在滴答的频率很慢的情况下确定对象是否处于休息状态需要时间,其他人有更好的方法吗?