![]() |
1
4
您可以跟踪最近的移动,并通过在每个时间步长中混合一点当前速度来更新它:
你需要设置
|
![]() |
2
1
看到您如何确定您的误报是由身体与他人接触造成的,为什么不在ContactListener的beginContact方法中添加几行,将身体的当前速度存储在用户数据中?然后可以在isStopped方法中检查速度。如果有一个存储的速度,而当前的速度没有更大,这意味着身体正在反弹,不管它撞到什么:忽略。如果有一个存储的速度,而当前速度更大,则表示球已经反弹,并朝着某个新的方向前进:清除存储的速度。如果没有存储的速度并且当前速度低于您的阈值,则您已检测到所需的情况。 在ContactListener中:
在您的isStopped检查中:
这是未经测试的,但你明白了。此外,请记住最初将用户数据设置为Float.MIN_VALUE。 |
![]() |
3
0
最后,我简单地将每个渲染调用的增量传递给isStopped()方法。
timeStopped只是一个以零开始的类属性。在游戏开始时(在用户做出动作之前),这确实是正确的,但在我的应用程序中,这是绝对正确的。除此之外,在这种情况下,它确实停止了。 我仍然希望看到一种不存储多余垃圾的方法,因为我猜box2d必须在某个地方有这些信息,以确定零速度物体是否没有力作用,或者撞击后是否只是改变方向。 |