4

LibGDX を使い始めたばかりで、すでにカメラの問題に直面しています。

私がよく理解していれば、LibGDXを使用する2Dゲームでは、すべてのエンティティ(画面上のすべてを意味します)の位置を再計算する必要があることをインターネットでいくつか見ました。速度などのパラメータを取ります...

私にとってそれは、カメラが動くのではなく、カメラが映し出す世界を意味します。私は反対のことをしたいのですが、カメラを動かして世界を動かしたくはありません. ですから、世界が動いてカメラが変化を見せるのではなく、カメラが動いて変化を見せたいのです。したがって、一部のエンティティが動かなくても (x 座標と y 座標が変わらない)、カメラが動いているように見えます。

だから私はCameraから継承するクラスとクラスOrthographicalCameraを持っていEntityます。また、2 つのインターフェイスPositionListener& PositionListenable=> パターン オブザーバーもあります。


だから私が
やろうとしたことは: x と y でエンティティを追跡します。

Camera.java のコードは次のとおりです。

public class Camera extends OrthographicCamera implements PositionListener {

    public Camera(float width, float height) {
        super(width, height);
    }

    @Override
    public void entityMoved(float newX, float newY) {
        translate(newX - position.x, newY - position.y);
        update();
        Gdx.app.log("entityMoved()", "newX=" + newX + " - newY=" + newY);
        Gdx.app.log("entityMoved()", "position.x=" + position.x + " - position.y=" + position.y);
}

}

position.xログを読むと、エンティティを追跡するために期待どおりに変更されたことがわかりますposition.yが、視覚的にはカメラが動かないのですか?? 私のカメラが翻訳されていないかのように、すべてが同じように見えます!

My camera is not moving at all, only my entity !
What am I missing ? I read something about "viewPort" but really didn't get the thing as I am a beginner with LibGDX.

4

1 に答える 1

3

ここで、どうやってそれを機能させましたか。メソッド
は次のとおりです。entityMoved()

@Override
public void entityMoved(float newX, float newY) {
    translate(newX - position.x, newY - position.y);
    Gdx.app.log("entityMoved()", "newX=" + newX + " - newY=" + newY);
    Gdx.app.log("entityMoved()", "position.x=" + position.x + " - position.y=" + position.y);

そしてメインループでは、次のrender()メソッドApplicationListener:

sprite.begin();
world.draw(sprite);
sprite.end();

camera.update();
sprite.setProjectionMatrix(camera.combined);

draw method() も私のエンティティを動かし、カメラであるオブザーバーに通知します。次に、カメラを更新し (以前のように独自の方法からではなく)、射影行列を更新するだけです。

少し遅れますが、私が望んでいたように動作します!

于 2012-07-26T21:16:22.153 に答える