Box2d正文OnUpdate函数

时间:2013-10-27 07:37:59

标签: android box2d andengine box2d-iphone jbox2d

我有两具尸体(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);

        }
    };

1 个答案:

答案 0 :(得分:0)

物理机构的poisition更新由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的方式使用关节。我依赖于你想要的以下行为。

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