我有两具尸体(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);
}
};
答案 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之外管理以下行为。它需要与东西碰撞吗?