2011-08-04 37 views
0

我已經在Andengine論壇上發佈了這個問題,但已經有一些關於這個主題的問題,有些有回覆,但是我想知道的還沒有任何回覆。模擬WeldJoint的問題

我試圖模擬一個像超級馬里奧兄弟一樣的玩家跳轉。首先,我使用一個簡單的接觸監聽器,當接觸發生時有一個布爾值錯誤,但接觸發生在牆壁地面,一切。所以,我現在正在試圖使用WeldJoint將另一個小身體附加到球員的底部作爲腳傳感器。但我無法做到這一點。 WeldJoint根本不會堅持。我試圖在更新線程上創建WeldJoint,什麼都沒有。我試着用設置方法來更新傳感器的位置,但它只是將傳感器放置在地下。 任何建議,將不勝感激。這是我試圖創建WeldJoint的方式。

播放器和傳感器

mPlayer = new AnimatedSprite(100, 150, PlayerTextureRegion); 
PlayerBody = PhysicsFactory.createBoxBody(this.mPhysicsWorld,mPlayer,BodyType.DynamicBody, PLAYER_FIXTURE_DEF); 
this.mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector(mPlayer, PlayerBody, true, true)); 
mScene.getLastChild().attachChild(mPlayer); 

final Shape mSensor= new Rectangle(mPlayer.getX()+4,mPlayer.getY()+mPlayer.getHeight(),10,4); 
final Body SensorBody = PhysicsFactory.createBoxBody(this.mPhysicsWorld,mSensor,BodyType.DynamicBody, SENSOR_FIXTURE_DEF); 
this.mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector(mSensor, SensorBody, true, true)); 
mScene.getLastChild().attachChild(mSensor); 

mScene.registerUpdateHandler(new IUpdateHandler() { 

     @Override 
     public void reset() { } 

     @Override 
     public void onUpdate(final float pSecondsElapsed) { 
      this.createJoint(PlayerBody,SensorBody); 
      ....... 

聯合法

private void createJoint(Body Anchor, Body Sensor){ 
    final WeldJointDef join = new WeldJointDef(); 
    join.initialize(Anchor,Sensor,Anchor.getWorldCenter()); 
    this.mPhysicsWorld.createJoint(join); 
} 

回答

1

好,而不是WeldJoint我用RevoluteJoint,不帶電機的配置,現在工作得很好。只需使用revoluteJointDef初始化兩個物體,它們就像焊接點一樣卡住。暫時我將與revoluteJoint一起將兩個物體合爲一體。