ここに解決策を投稿し、この問題についてLibgdxで試したことを投稿します。
--
T1。どこかからダウンロードしたオリジナルのスプライトシート(アトラスファイルなし)をパディング2に作成します。
A1. これは、アトラスのないスプライトシートを再パックすることは不可能です。スライス/スプリッター ツールを見つけたとしても、TiledMap(.tmx) 用に適切に再パックする必要がある画像の束である必要があります。
A1(更新)。@Nine Magics が提供するスクリプトは、これを行うための最良の方法です! (これを最終的な解決策として使用します)
--
T2。libgdx - nightyまたはgdx-toolgTiledMapPacker
によって提供されるものを使用します。バッチ コードは次のようになります。
java -classpath "gdx.jar";"gdx-natives.jar";"gdx-backend-lwjgl.jar";"gdx-backend-lwjgl-natives.jar";"gdx-tiled-preprocessor.jar";"extensions/gdx-tools/gdx-tools.jar" com.badlogic.gdx.tiledmappacker.TiledMapPacker "PathToYourProject\android\assets\RawMap" "PathToYourProject\android\assets\Map" --strip-unused
A2. ファイルを分類するために複雑なフォルダー パスを使用している場合、 Tiledで読み取ることができなかった出力 .tmx .png
。また、出力ファイルは によってロードに失敗する可能性がありますAtlasTmxMapLoader
。
--
T3。カメラ位置補正、カメラ位置を整数にします。@Julian や libgdx tiledmap の @strangecat が好きなコードは、Nearest フィルタリングでちらつきます
A3. 私はこのソリューションを問題なく使用しており、それらとは異なるコードを投稿しています。
float cameraX = (int)(mainCamera.position.x * Game.PPM_X) / Game.PPM_X;
float cameraY = (int)(mainCamera.position.y * Game.PPM_X) / Game.PPM_X;
float cameraZ = mainCamera.position.z;
mainCamera.position.set(cameraX, cameraY, cameraZ);
また、それをロードしますTmxMapLoader.Parameters
TmxMapLoader.Parameters params = new TmxMapLoader.Parameters();
params.textureMinFilter = Texture.TextureFilter.Linear;
params.textureMagFilter = Texture.TextureFilter.Nearest;
params.generateMipMaps = true;
assetManager.load(TILED_MAP_SETS.FIRST_MAP, TiledMap.class, params);
PPMを使用していて、ピクセルごとに移動したい場合は、この整数補正をゲームに使用できます。そうでない場合は、位置を整数に変換するだけです。
私はこの問題を解決するために 1 日をほとんど無駄にしました。これらの調査がすべてのゲーム開発者に役立つことを願っています :)
編集(2018/04/21)
Unityでも同じ問題が発生していることがわかりましたが、Libgdxにデフォルトで2x Anti-Alias設定があるかどうかはテストしていません。Libgdx は、アンチエイリアスをオフにすることで Unity として問題を解決する場合があります。