Windows phone 7 如何确定对象是否处于静止状态?

Windows phone 7 如何确定对象是否处于静止状态?,windows-phone-7,xna,physics,farseer,Windows Phone 7,Xna,Physics,Farseer,使用图书馆 我想弄清楚我如何判断一个物理物体是否处于静止状态。有人知道怎么做吗?有人知道我能做什么吗 一个示例场景是一个可以捡起并抛来抛去的弹跳球。我尝试创建一个计时器,该计时器对每个与地板发生碰撞事件时的反弹进行计时,并根据该计时器确定对象是否处于静止状态,但如果用户将球左右滑动,则该计时器不起作用 有什么建议吗?这是非常基本的东西。你的物理对象应该是某个类的实例,该类包含有关对象位置、速度等的信息。在任何给定时间,你都应该能够检查对象的速度,显然,如果它的速度==0,它就处于静止状态。到目前

使用图书馆

我想弄清楚我如何判断一个物理物体是否处于静止状态。有人知道怎么做吗?有人知道我能做什么吗

一个示例场景是一个可以捡起并抛来抛去的弹跳球。我尝试创建一个计时器,该计时器对每个与地板发生碰撞事件时的反弹进行计时,并根据该计时器确定对象是否处于静止状态,但如果用户将球左右滑动,则该计时器不起作用


有什么建议吗?

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

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

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

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

        previousPosition = currentPosition;
    }

但是它也有一些问题,例如,如果它捕捉到球在空中的位置,然后在相同的位置(不太可能)返回,并且在滴答声中频率非常高,它有时会意外捕捉到相同的位置,在滴答声的频率很低时,需要时间来确定物体是否处于静止状态,其他人有更好的方法吗?

如果您有对底层Farseer
主体的运行时访问权,那么您还应该有权访问属性
LinearVelocity
,您可以检查该属性的
0
大小。

使用Physical helper处理物理对象时没有速度属性。这太愚蠢了。如果是这样的话,我会创建我自己的物理课。对于我正在做的事情,很容易使用物理助手,因为它使用行为。但是有时候有点令人沮丧。这个类有动量属性吗?它没有。使用physics helper,您可以简单地在blend中创建一个椭圆,并赋予它物理属性,如恢复、质量等。然后,可以在代码隐藏中将该对象作为Farseer BodyObject进行操作。身体跟踪世界位置。它基本上是一个受力影响的空间点,比如碰撞和重力产生的冲击。除了位置之外,它没有任何状态可以帮助我。可能只是创建我自己的物理课程。可能不是最优雅的解决方案,因为会有一些特殊情况下失败(就像你提到的那些)。研究创建一个类。比较浮点值是否相等通常是一个糟糕的计划。为什么不简单地每帧检查一次呢?这是一个silverlight应用程序。虽然我可以检查每一帧,但问题不在于何时检查,而在于如何检查。@Andrew Russel如果我将它们转换为整数,这会更好吗?当我调试的时候,它似乎只起到了我所说的那些小问题。Farseer难道没有一些内置的机制来检测对象是否处于静止状态,这样它就可以进入睡眠状态吗?我在寻找某种状态,但我找不到。有了物理助手,每个物体的行为就像一个farseer BodyObject,它实际上只允许你获得物体的位置,以及施加力、冲量等。