使用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);
当我运行这个应用程序时,精灵正在移动,但物理对象不是。我做错了什么?
答案 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而异。
希望这有帮助。