2011-08-04 113 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一起将两个物体合为一体。