2013-10-27 68 views
0

我有兩個機構(A,B)。我希望B遵循A.我可以用setTransfrom()函數將B位置更改爲A位置。但是我必須在每個幀率下改變B的位置。所以我必須使用諸如聯繫人監聽器之類的東西。當我在Andengine中使用普通對象時,它在下面有這個函數,而不是contactlistener。Box2d正文OnUpdate函數

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

     } 
    }; 

回答

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

從自己的更新處理程序中,而不是註冊世界作爲updateHandler本身。

以下是一些不太實際的建議: 或者做到這一點box2D的方式,你可以使用一個聯合。我依賴於你想要的以下行爲。

或者......甚至沒有對象B作爲Box2D世界的一部分,也許只是在box2D之外管理以下行爲。它需要與東西相撞嗎?