LibGDX には、(0,0) が左下にある座標系があります。(この画像のように: http://i.stack.imgur.com/jVrJ0.png )
これは主に、通常の座標系 (0,0 が左上隅にある) で既に作成したゲームを移植しているため、壁に頭をぶつけています。
私の質問:この座標系を変更する簡単な方法はありますか?
LibGDX には、(0,0) が左下にある座標系があります。(この画像のように: http://i.stack.imgur.com/jVrJ0.png )
これは主に、通常の座標系 (0,0 が左上隅にある) で既に作成したゲームを移植しているため、壁に頭をぶつけています。
私の質問:この座標系を変更する簡単な方法はありますか?
カメラを使用する場合 (使用する必要があります)、座標系の変更は非常に簡単です。
camera= new OrthographicCamera(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
camera.setToOrtho(true, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
TextureRegions や TextureAtlas を使用する場合、これに加えて必要なことは、region.flip(false, true) を呼び出すことだけです。
デフォルトで y-up を使用する理由 (上図のように簡単に変更できます) は次のとおりです。
libgdx で y-down を使用する場所は次の 2 つだけです。
繰り返しますが、使用する座標系は、カメラまたはちょっとした行列演算を使用して、好きなように簡単に変更できます。
変換を非表示にして、一度設定した後にそれについて考えたくない場合は、必要なすべての機能を継承するクラスを作成できますが、最初に座標を変換してから親クラスの関数に渡します。残念ながら、これには多くの時間がかかります。
y' = height - y
あるいは、オブジェクト全体 (またはそれが使用しているもの) に対して単純な変換を行うメソッドを作成し、Coordinate
各操作の前に 1 回呼び出すこともできます。
面白いグラフィックライブラリだと思います。私は以下のリンクからこの評価を見つけました:
もう1つの問題は、Libgdxのさまざまな部分でさまざまな座標系が使用されていたことです。軸の原点が左下隅にあり、y軸が上を向いている場合もあれば、スプライトの左上隅が下を向いている場合もあります。メッシュを描画するとき、原点は画面の中央にありました。これにより、画面上の正しい場所にすべてを配置するために、かなりの混乱と余分な作業が発生しました。
SpriteBatch
を追加する特定のメソッドをオーバーライドする拡張クラスを作成しましたy = Gdx.graphics.getHeight() - y - height
。シンプルだが効果的。
OrthographicCamera を介して提案された反転座標系を使用して、テクスチャとフォントを正しくレンダリングすることができました。これが私がしたことです:
private SpriteBatch batch;
private BitmapFont font;
private OrthographicCamera cam;
private Texture tex;
@Override
public void create () {
batch = new SpriteBatch();
font = new BitmapFont(true);
font.setColor(Color.WHITE);
cam = new OrthographicCamera(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
cam.setToOrtho(true, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
tex = new Texture("badlogic.jpg");
}
@Override
public void dispose() {
batch.dispose();
font.dispose();
tex.dispose();
}
@Override
public void render () {
cam.update();
batch.setProjectionMatrix(cam.combined);
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
batch.begin();
font.draw(batch, "Test", 50, 50);
batch.draw(tex, 100, 100, tex.getWidth(), tex.getHeight(), 0, 0, tex.getWidth(), tex.getHeight(), false, true);
batch.end();
}
注意すべき重要事項は次のとおりです。
今晩ここに戻ってきて、他の問題やこれらすべてを行うことで発見された問題を修正するために編集を行っているかどうかを確認します.