7

私は Android 開発者で、LibGDX を使用して最初のゲームを構築しています。たくさん読んだ後でも、まだ理解できないことが 1 つあります。

最高解像度2560x1440(ベクター画像ではなく醜い拡大を防ぐため)のために、1セットの画像が必要であることを認識しています。

私は TexturePacker を使用して画像をパックし、線形線形を使用して最大品質を取得しています:

TexturePacker.Settings settings = new TexturePacker.Settings();
settings.filterMin = Texture.TextureFilter.Linear;
settings.filterMag = Texture.TextureFilter.Linear;
settings.maxWidth = 4096;
settings.maxHeight = 2048;
TexturePacker.process(settings, inputDir, outputDir, packFileName);

いくつかのSOで推奨されているように、カメラを固定メーターに設定し、すべてのPPMのものを避けました。Screen の C'TOR より:

mCamera = new OrthographicCamera();
mCamera.viewportWidth = 25.6f; ; // 2560 / 100
mCamera.viewportHeight = 14.4f ; // 1440 / 100
mCamera.position.set(mCamera.viewportWidth / 2, mCamera.viewportHeight / 2, 0f);
mCamera.update();

ご覧のとおり、1 メートル = 100 ピクセルで作業することにしました。

これは、スプライトを 1/100 サイズで描画する必要があることを意味します。これは、ここで行っています。

TextureAtlas atlas = new TextureAtlas(Gdx.files.internal("images/pack.atlas"));
mImage = atlas.createSprite("image"));
mImage.setSize(mImage.getWidth() / 100 , mImage.getHeight() / 100);

これは機能し、画像は意図したとおりに表示されます。しかし、彼らは地獄のように歪んでいます!完全に丸い画像は、エッジがピクセル化されて丸く見えません。

だから、私の質問は次のとおりです。

  1. これはベストプラクティスですか、それとも別の方法で作業する必要がありますか?
  2. 最高品質の画像だけを持っているのは正しいですか?
  3. 歪みは、私のコードが実際にスプライトを縮小し、どういうわけか libgdx が再び拡大して品質を損なったことを意味しますか?

ありがとう!

EDIT
@ Tenfour04の回答を(1)と(2)に適応させます。
(3) に関しては、問題は Genymotion :( 、ゲームをピクセル化することです。実際のデバイスでいくつかの解像度でテストしましたが、完璧に見えます。

4

1 に答える 1

1
  1. カメラのセットアップで 1 つのエラーがあります。画面の縦横比は常に同じであると想定していますが、実際には異なります。一定の高さまたは幅 (作成しているゲームの種類に基づいて選択) を選択し、現在の画面の縦横比に基づいて反対の寸法を調整することをお勧めします。例えば:

    mCamera.viewportHeight = 25.6f; //game screen always 25.6 meters tall

    mCamera.viewportWidth = 25.6f / (float)Gdx.graphics.getHeight() * (float)Gdx.graphics.getWidth();

  2. 「最高の解像度を得るには、1 セットの画像を用意する必要があります」これは必ずしも真実ではありません。これを行うと、非常に高解像度の画像を利用できないデバイスにロードする必要があります。これは大量のメモリを使用し、読み込み時間を増大させます。開発中は問題ないかもしれませんが、将来的には、選択的にロードできる 2 つまたは 3 つの異なる解像度のバージョンが必要になるでしょう。

    このため、100コードのどこにでもハードコーディングすることも避けます。pixelsPerMeterゲーム起動時に一度セットされる変数を作ります。今のところは 100 にすることができますが、後で解像度の小さいアートを作成することにした場合は、それに応じて調整することができます。コード内で 100 の出現箇所をすべて見つける必要はありません。

  3. 最小フィルターはMipMapLinearLinearまたはである必要がありますMipMapLinearNearest。そうしないと、スプライトが本来の解像度よりも小さく描画されるとパフォーマンスが低下し、説明したように歪んで見える場合があります。mip マッピングを調べて、これが当てはまる理由を確認できます。

于 2016-04-18T13:10:51.377 に答える