2016-04-18 4 views
6

私はLibGDXを使って私の最初のゲームを構築するアンドロイドの開発者です。 A LOTを読んだ後、私は理解していないことがまだ1つあります。LibgdxとTexturePackerを使ってxxxdpiイメージを歪めます

最高の解像度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のもの。スクリーンの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が再びスケールアップして品質を損なったのでしょうか?

ありがとう!私はつもりは(1)にTenfour04の答え@適応し、(2)よ

EDIT
。 (3)、問題はそのゲームをピクセル化、Genymotion :(である。私は、いくつかの解像度で実際のデバイス上でテストしてきたし、それが完璧に見えるに関して

答えて

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である必要があります。それ以外の場合は、スプライトが元の解像度よりも小さく描画されるとパフォーマンスが低下し、記述したように歪んで表示されることがあります。あなたは、なぜこれが当てはまるかを見るために、ミップマッピングを調べることができます。

+0

詳細な回答ありがとうございました。 (1)私はこれに慣れて、もちろんそれを実装するつもりです。 (2)TexturePackerでスマートで簡単に聞こえるこの方法について言及しているチュートリアルが表示されないのはどうですか? (3)MipMapLinearLinearなどのオプションも試しましたが、スプライトはまだ歪んでいます。だから、私は別の問題があるかもしれないと言っているから? – Shirane85

+0

なぜ多くのチュートリアルに含まれていないのか分かりません。 TexturePackerにはサポートがあります。たぶんあなたの歪んだスプライトの写真を投稿してください。あなたが説明したことが他に何を引き起こすかはわかりません。 – Tenfour04

関連する問題