2011-08-04 9 views
0

すでにこの質問をAndengineフォーラムに投稿していますが、このトピックに関するいくつかの質問がありますが、いくつかの回答はありますが、私が知りたいものはまだ回答がありません。問題WeldJointをシミュレートする

スーパーマリオブラザーズのようなプレーヤーのジャンプをシミュレートしようとしています。まず、単純なコンタクトリスナーを使用して、ブール値をfalseに設定しました。だから、私は今WeldJointを使ってフットセンサーとしてもう一つの小さなボディをプレーヤーの底につけようとしています。しかし、私はそれを達成できませんでした。ウェルドジョイントはまったく固執しません。私は更新スレッドでWeldJointを作成しようとしましたが、何もしませんでした。私はsetpositionメソッドを使ってプレーヤーのセンサー位置を更新しようとしましたが、センサーを地面の下に置きます。 何か提案がありがとうございます。ここで私は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

[OK]を、代わりのWeldJoint Iは、モータ設定なしで、RevoluteJointを使用し、それが今で正常に動作します。 revoluteJointDefを使用して2つのボディを初期化すると、ウェルドジョイントのようにスタックされます。当分の間、私はrevoluteジョイントで2体を1体にするつもりです。

関連する問題