2

皆さんこんにちは私はJetpackのようなゲームを開発しようとしているので、通常は押し下げられる重力を設定し、ユーザーが画面をタップすると重力が押し上げられるように変更したいと考えています。その方法を説明するチュートリアルを1週間検索しましたが、検索したものが見つかりませんでした。誰かがその方法を説明したり、チュートリアルへのリンクを投稿したりできますか?

ありがとうございました !!

    main = new Sprite(sX, sY, mainTextureRegion);
    main.setScale(1);
    main.setFlippedHorizontal(true);
    scene.attachChild(main);
    mPhysicsWorld = new PhysicsWorld(new Vector2(0, SensorManager.GRAVITY_EARTH), false);
    final FixtureDef objectFixtureDef = PhysicsFactory.createFixtureDef(1, 0.5f, 0.5f);
    final Body body = PhysicsFactory.createBoxBody(mPhysicsWorld, main, BodyType.DynamicBody, objectFixtureDef);
    mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector(main, body, true, true));
    final Vector2 gravity = new Vector2(0, 5f);
    mPhysicsWorld.setGravity(gravity);

    scene.registerUpdateHandler(new IUpdateHandler() {
        @Override
        public void onUpdate(float pSecondsElapsed) {

      }

        @Override
        public void reset() {
            // TODO Auto-generated method stub

        }});
4

1 に答える 1

3

ユーザーが画面に触れたとき、そのように行われることは想定されていないため、重力を変更しないでください。彼が画面に触れたら、LinearImpulse (まだ最大速度になっていないかどうかを確認してください) またはそのようなものを適用して、それを上に上げます。重力は常にすべての物理オブジェクトを引き寄せる必要があるため、変化してはなりません。重力を変更すると、プレイヤーのオブジェクトだけでなく、すべてのオブジェクトの動作が変更されます。

編集

物理エンジンを機能させるには、各レンダリングで PhysicsWorld クラスの step() メソッドを呼び出す必要があります。Andengine の問題は、Andengine がまったく処理しないため、render() メソッドに直接アクセスしないことです。そのため、 onLoadEngine() メソッドで返す Engine オブジェクトに IUpdateHandler を登録する必要があります。このようにして、インターフェイスの onUpdate() メソッドがレンダリングごとに呼び出され、ここで step() メソッドを呼び出して物理部分を機能させることができます。float 値は、最後のレンダリングから経過した秒数を示しますが、それを気にする必要はありません。メソッドは 1 秒間に複数回呼び出されます。

それが役に立てば幸い。

編集2

私はこれがうまくいくはずだと思います:

//on the Scene object or on the Engine one
scene.registerUpdateHandler(new IUpdateHandler() {
    @Override
    public void onUpdate(float pSecondsElapsed) {
        mPhysicsWorld.onUpdate(pSecondsElapsed);
    }

    @Override
    public void reset() {}
});
于 2012-11-04T17:17:37.783 に答える