0

我有两个身体(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 body 有什么选项吗?我的意思是这样的:

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

从您自己的更新处理程序中,而不是将世界注册为更新处理程序本身。

这里还有一些不太实用的建议: 或者你可以使用关节的 box2D 方式。我取决于您想要的以下行为。

或者......你甚至没有对象 B 作为 Box2D 世界的一部分,也许,只是在 box2D 之外管理以下行为。它需要与东西碰撞吗?

于 2013-10-29T20:26:41.163 回答