如何在屏幕标题(Box2D / AndEngine)时获得重力?

时间:2012-07-01 04:58:45

标签: box2d andengine gravity

我使用AndEngine和Box2d开发游戏。我正在对身体施加一种力量以保持它的高度#34;等于引力。我设置了场景,以便:

public void onAccelerationChanged(final AccelerationData pAccelerationData) {
        gravity = Vector2Pool.obtain(pAccelerationData.getX(), pAccelerationData.getY());
        this.mPhysicsWorld.setGravity(gravity);
        Vector2Pool.recycle(gravity);
    }

现在我需要设置我的力量:

body.applyForce(new Vector2(0,-*gravity*), new Vector2(body.getWorldCenter()));

如何获得重力值,以便在屏幕倾斜时将其作为力施加?

2 个答案:

答案 0 :(得分:1)

如果您想要一个不受重力影响的物体,可以将其物体设置为静态或动态。它更有效,避免了额外的处理。

顺便说一句,我猜你得到的是因为你已经用这条线回收了矢量

Vector2Pool.recycle(gravity);

修改

为什么你不简单地使用这样的东西?

public void onAccelerationChanged(final AccelerationData pAccelerationData) {
    gravity = Vector2Pool.obtain(pAccelerationData.getX(), pAccelerationData.getY());
    this.mPhysicsWorld.setGravity(gravity);
    body.applyForce(new Vector2(-pAccelerationData.getX(), -pAccelerationData.getY()), new Vector2(body.getWorldCenter()));
    Vector2Pool.recycle(gravity);
}

答案 1 :(得分:0)

我对Box2D扩展做了一些修改,以包含更新版Box2D中的setGravityScale方法。我发布了链接,

how-do-i-make-a-body-ignore-gravity-andengine

例如,让身体忽略重力召唤,

Body.setGravityScale(0.0f);

在你的情况下身体可能是动态的。关键是你不需要为你需要抵抗重力的每个物体施加一个力。在示例中执行此操作的代码取自Box2D 2.2.1。

我提供了一个如何实施的解释。还为GLES1提供了下载。

希望这有帮助。