AndEngine,如何使用加速计和PhysicsWorld平滑移动精灵?

4
使用AndEngine,我正在尝试使用加速度计移动精灵(球),它应该会反弹到墙壁并撞击其他障碍物。
到目前为止,我找到了以下两种方法。
 public void onAccelerometerChanged(final AccelerometerData myAccelerometerData) {
    mySprite.setPosition(mySprite.getX() + myAccelerometerData.getX(), mySprite.getY() + myAccelerometerData.getY());

}

这个方法在非物理世界中运作得非常平稳,但是在与墙壁和其他障碍物的碰撞中则无法顺畅弹跳。
现在使用的这种方法是AndEngine提供的示例中的一种,球的物理特性还不错,但是其移动并不如我所期望的那样平滑。
 @Override
    public void onAccelerometerChanged(final AccelerometerData pAccelerometerData) {
            final Vector2 gravity = Vector2Pool.obtain(pAccelerometerData.getX(), pAccelerometerData.getY());
            this.mPhysicsWorld.setGravity(gravity);
            Vector2Pool.recycle(gravity);
    }

我也尝试过将pAccelerometerData乘以某些值,如2和5,是的,它似乎更具响应性,但也使球移动得更快,难以玩。
为了让我的问题清晰明了,我希望我的游戏像Android上的Labyrinth或Rebound游戏中的球一样平滑。它们的球对加速度计更具响应性。例如,在Labyrinth中,如果您想突然停止移动的球,可以这样做,但在AndEngine示例中,它会像在无摩擦世界中移动一样继续移动。
有没有办法使其更具响应性和平滑,就像Labyrinth游戏那样? https://market.android.com/details?id=se.illusionlabs.labyrinth.lite&hl=en
1个回答

3
你可以(如你所试)将pAccelerometerData乘以一个系数,并在小球上添加一个阻尼项。这样小球会更加灵敏,停下来更快,保持合理的速度。
阻尼是物体的一种属性。因此,它应该是类似于以下内容:
body.setLinearDamping(1.5f);

1
我尝试了一下,嗯,精灵更响应并提供更好的控制。谢谢Zoleas。 - Waqar Ahmed
我也有同样的问题。我应该在非物理世界还是物理世界中使用body.setLinearDamping(1.5f)? - Amit Thaper
1
它是物体的属性,因此属于物理世界。将阻尼应用于您移动对象(球,角色等)的物体上。 - Zoleas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接