我使用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()));
如何获得重力值,以便在屏幕倾斜时将其作为力施加?
答案 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提供了下载。
希望这有帮助。