车身可调速度和发动机/ Box2D

时间:2013-03-04 01:56:44

标签: android box2d andengine

我试图通过加速度计的移动来改变附着在矩形上的物理体的速度。我不能让身体改变速度,一旦它被设定它是永久财产吗?

这是我的populateScene:

rect = new Rectangle(220, -200, 24, 24, this.getVertexBufferObjectManager());
rect.setColor(Color.GREEN);
mScene.attachChild(rect); 

ball = PhysicsFactory.createBoxBody(mPhysicsWorld, rect, BodyType.DynamicBody, droppingBoxDef);

mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector(
                    rect, ball));

这是我尝试改变速度的地方:

@Override
    public void onAccelerationChanged(AccelerationData pAccelerationData) {

        int accellerometerSpeedX = (int)pAccelerationData.getX();
        //   accellerometerSpeedY = (int)pAccelerometerData.getY();
        //Log.v("Accelerometer X Y Z: ", ""+pAccelerationData);

        ball.setLinearVelocity(accellerometerSpeedX, 0);

    }

如果矩形上方的第二部分没有加载,并且其物理主体正常工作。当我尝试使用时它似乎消失了: ball.setLinearVelocity。

Body对象是类中的全局变量,因此可以在两种方法中引用它。我已经尝试在Populatecene中使用更新处理程序并在那里设置ball.setLinearVelocity,但是这给出了相同的结果。

基本上我的问题是:身体的速度可以在物理世界连接后改变吗?

1 个答案:

答案 0 :(得分:2)

典型地,在Box2D中,您没有设置速度,而是将冲动或力施加到物体上以使其加速或减速。
对于上面描述的内容,您不应该使用setLinearVelocity。尝试使用

ball.applyForce(new Vector2(accellerometerSpeedX, 0), ball.getWorldCenter());

 boxBody.applyAngularImpulse(new Vector2(accellerometerSpeedX, 0));