0

私は2つの体(A、B)を持っています。B が A の後に続くようにします。 setTransfrom() 関数で B の位置を A の位置に変更できます。しかし、フレーム レートごとに B の位置を変更する必要があります。そのため、連絡先リスナーのようなものを使用する必要があります。Andengine で通常のオブジェクトを使用すると、contactlistener の代わりに以下の関数が使用されます。

this.foot = new Rectangle(this.getX(), this.getY(), 8, 10, ResourcesManager.getInstance().vbom){
        @Override
        protected void onManagedUpdate(float pSecondsElapsed)
        {
           // super.onManagedUpdate(pSecondsElapsed);

            this.setPosition(body.getPosition().x*PhysicsConstants.PIXEL_TO_METER_RATIO_DEFAULT+1,
                    body.getPosition().y*PhysicsConstants.PIXEL_TO_METER_RATIO_DEFAULT-15);

        }
    }; 

作成時にこの種のリスナーを設定できるということです.box2d本体のオプションはありますか? 私はそのようなことを意味します:

this.footBody=PhysicsFactory.createBoxBody(this.mPhysicsWorld, this.foot, BodyType.DynamicBody, footFixtureDef){
        @Override
        protected void onManagedUpdate(float pSecondsElapsed)
        {
           // super.onManagedUpdate(pSecondsElapsed);

            this.setPosition(body.getPosition().x*PhysicsConstants.PIXEL_TO_METER_RATIO_DEFAULT+1,
                    body.getPosition().y*PhysicsConstants.PIXEL_TO_METER_RATIO_DEFAULT-15);

        }
    };
4

1 に答える 1

0

物理体の位置の更新は、Box2D ライブラリによって管理されます。ただし、シーンに追加の更新ハンドラーを登録して、その更新中に実行したいことを box2D ワールドに伝えることができます。

this.scene.registerUpdateHandler(new IUpdateHandler() {
@Override
public void onUpdate(float pSecondsElapsed) {
        // TODO Auto-generated method stub
        //Your code to run here!
}

したがって、ワールド内のボディへの参照のリストを保持している場合は、ゲームの各ティックに力を適用したり、それらの位置を設定したりできるはずです。box2D ワールド ステップの前または後にワールドを確実に更新したい場合は、イベント コールを行うことができます。

mBox2dWorld.onUpdate(pSecondsElapsed);

ワールドを updateHandler 自体として登録するのではなく、独自の更新ハンドラー内から。

あまり実用的でない提案もいくつかあります: または、ジョイントを使用できる box2D の方法でそれを行います。私はあなたが望む次の動作に依存します。

または...おそらくBox2Dの世界の一部としてオブジェクトBさえ持っておらず、box2Dの外部で次の動作を管理するだけです。ものと衝突する必要がありますか?

于 2013-10-29T20:26:41.163 に答える