限制box2d体沿着andEngine轴的移动

时间:2014-12-26 07:23:58

标签: box2d andengine accelerometer game-physics

目的是限制box2d物理体在某个轴上的移动 - 水平或垂直移动,这是身体定义:

Body ballBody;
Sprite ball;    
ball = new AnimatedSprite(x_end, y_end-ballTextureRegion.getHeight(), this.ballTextureRegion, this.getVertexBufferObjectManager());
ballBody = PhysicsFactory.createCircleBody(this.mPhysicsWorld, ball, BodyType.DynamicBody, FIXTURE_DEF);
this.mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector(ball, ballBody, true, true));
scene.registerUpdateHandler(this.mPhysicsWorld);
scene.attachChild(ball);

球使用andEngines IAccelerationListener通过加速度计向所有方向移动,试图沿x轴限制身体,使其仅垂直移动:

在主游戏循环中,将其线性速度的x分量设为0:

scene.registerUpdateHandler(new IUpdateHandler() {

    public void reset() {
    }

    // main game loop
    public void onUpdate(float pSecondsElapsed) {
        ballBody.setLinearVelocity(0, ballBody.getLinearVelocity().y); // set x velocity as 0
   }
});

但是现在球也可以水平移动,它的水平速度现在较小但不是完全为0.如何限制它沿一个方向的移动?

1 个答案:

答案 0 :(得分:1)

我通过将box2d体的类型从动态变为运动来解决问题,从here读取体型,并发现在我的情况下,运动体更好地作为一个动态的身体受到了所有人的影响物质世界的力量。

ballBody = PhysicsFactory.createCircleBody(this.mPhysicsWorld, ball, BodyType.KinematicBody, FIXTURE_DEF);

并将其速度沿y轴设置为垂直移动:

penBody.setLinearVelocity(mPhysicsWorld.getGravity().x, 0);