1

我正在使用 AndEngine 和 Box2d 开发游戏。我正在向一个物体施加一个力,以使其“高空”等于重力。我设置了场景,以便:

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()));

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

4

2 回答 2

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);
}
于 2012-07-01T06:40:57.017 回答
0

我对 Box2D 扩展进行了一些更改,以包含来自最新版本的 Box2D 的 setGravityScale 方法。我把链接贴在了,

我如何做一个身体忽略重力和引擎

例如,让身体忽略重力呼叫,

Body.setGravityScale(0.0f);

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

我解释了它是如何实现的。还为 GLES1 提供了下载。

希望这可以帮助。

于 2012-10-07T21:14:17.457 回答