Box2d 主体更新功能



我有两个主体(A,B)。我要 B 跟着 A。我可以使用 setTransfrom() 函数将 B 位置更改为 A 位置。但是我必须在每个帧速率下更改 B 的位置。所以我必须使用类似联系人侦听器的东西。当我在Andengine中使用普通对象时,它在下面有这个函数而不是联系监听器。

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

我的意思是我可以在创建它时设置这种侦听器。盒子2d身体有什么选择吗?我的意思是这样的:

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

物理体的定位更新由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 本身。

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

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

最新更新