0

私はすでにこの質問をAndengineフォーラムに投稿しましたが、このトピックに関してすでにいくつかの質問があり、いくつかは返信がありますが、私が知りたいものはまだ返信がありません。

スーパーマリオブラザーズのようにプレーヤーのジャンプをシミュレートしようとしています。最初に、単純な接触リスナーを使用して、接触が発生したときにブール値がfalseになるようにしましたが、接触は壁の地面などすべてで発生します。そこで、WeldJointを使用して、足センサーとしてプレーヤーの下部に別の小さなボディを取り付けようとしています。しかし、私はそれを達成することができませんでした。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);
}
4

1 に答える 1

1

わかりました。WeldJointの代わりに、モーター構成なしでRevoluteJointを使用しましたが、正常に動作するようになりました。revoluteJointDefを使用して2つのボディを初期化するだけで、weldjointのようにスタックします。とりあえずrevoluteJointで2体を1体にするつもりです。

于 2011-08-05T13:50:27.293 に答える