物理对象不随精灵移动

时间:2013-02-23 18:07:29

标签: android sprite andengine

使用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);

当我运行这个应用程序时,精灵正在移动,但物理对象不是。我做错了什么?

2 个答案:

答案 0 :(得分:1)

使用box2d你需要移动身体,而不是精灵。你应该把精灵想象成一个由身体控制的傀儡。

答案 1 :(得分:0)

如果将精灵附加到身体,则无法再使用修改器移动精灵。物理世界现在基本上拥有关于位置的(即,如果身体由于施加的力而移动,则连接的精灵将随之移动)。你只能通过向身体施加力来移动它,即,

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

,或者

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

或线速度,

tower1Body.setLinearVelocity(vX, vY);

还要注意,物理世界中的坐标与场景中的坐标不同。例如,tower1.getX()是sprite tower1场景中的坐标,但在物理世界中,正文的位置将因/ PIXEL_TO_METER_RATIO_DEFAULT而异。

希望这有帮助。