1

加速度計の動きで長方形に取り付けられた物体の速度を変えようとしていました。ボディに速度を変更させることができませんが、一度設定すると永続的なプロパティになりますか?

これは私の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);

    }

上の2番目の部分がないと、長方形は正常に読み込まれ、物理ボディが正しく機能します。ball.setLinearVelocityを使おうとすると消えてしまうようです。

Bodyオブジェクトはクラス内のグローバル変数であるため、両方のメソッドで参照できます。Populatescene内で更新ハンドラーを使用してball.setLinearVelocityを設定しようとしましたが、同じ結果が得られました。

基本的に私の質問は、物理学の世界に接続された後、物体の速度を変更できるかどうかです。

4

1 に答える 1

2

通常、Box2Dでは、Velocitiesを設定するのではなく、インパルスまたはフォースをボディに適用して、ボディを加速または減速させます。
上記で説明していることについては、setLinearVelocityを使用しないでください。使ってみてください

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

また

 boxBody.applyAngularImpulse(new Vector2(accellerometerSpeedX, 0));
于 2013-03-05T23:13:55.153 に答える