1

AndEngine を使用して、オブジェクトを移動したいので、Sprite を作成します。

tower1 = new Sprite(50, 150, this.tower1TextureRegion,
            this.getVertexBufferObjectManager());
tower1Body = PhysicsFactory.createBoxBody(physicsWorld, tower1,
            BodyType.KinematicBody, towerFixtureDef);
this.physicsWorld.registerPhysicsConnector(new PhysicsConnector(tower1,
            tower1Body, true, true));


次に、移動を定義します。

moveTower1 = new MoveXModifier(actualDuration, tower1.getX(), -150f)
     {
     @Override protected void onModifierFinished(IEntity 
     removeTower(tower1); }
     }; 
     tower1.registerEntityModifier(moveTower1);

このアプリを実行すると、スプライトは動きますが、物理オブジェクトは動きません。私が間違っていることは何ですか?

4

2 に答える 2

1

box2dでは、スプライトではなく、ボディを移動する必要があります。あなたが人形のように考えるべきスプライトは、体によって制御されます。

于 2013-02-23T18:29:55.363 に答える
0

スプライトをボディにアタッチすると、モディファイヤで移動できなくなります。物理世界は基本的に位置に関してそれを所有しています (つまり、適用された力によってボディが動くと、接続されたスプライトも一緒に動きます)。体自体に力を加えることによってのみ動かすことができます。つまり、

tower1Body.applyLinearImpulse(impulseX, impulseY, pointX, pointY);

また、

tower1Body.applyForce(forceX, forceY, pointX, pointY);

または線速度、

tower1Body.setLinearVelocity(vX, vY);

また、物理世界の座標はシーンの座標とは異なることに注意してください。たとえば、tower1.getX() はスプライト tower1 のシーン内の座標ですが、物理世界では体の位置は /PIXEL_TO_METER_RATIO_DEFAULT だけ異なります。

お役に立てれば。

于 2013-02-23T18:30:28.830 に答える