我会在这里发布我的解决方案以及我为 Libgdx 尝试过的关于这个问题的方法。
--
T1. 制作从某处下载到 padding 2 的原始 spritesheet(无图集文件)。
A1. 这对没有图集的spritesheet进行重新打包是不可能的,即使你找到了切片/分割工具,也应该是一堆需要重新打包的图片适合 TiledMap(.tmx)
A1(已更新)。@Nine Magics 提供的脚本将是最好的方法! (我用这个作为我的最终解决方案)
--
T2.使用libgdx-nighty或gdx-toolg提供的TiledMapPacker,批处理代码应为:
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 或@strangecat 的代码来自libgdx tiledmap flicker with Nearest filtering
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 并希望逐像素移动,您可以在游戏中使用此整数校正,否则您可以将位置转换为整数。
我几乎浪费了一整天的时间来解决这个问题,希望这些调查可以帮助每个游戏开发者:)
编辑(2018/04/21)
我发现 Unity 也有相同的 problem,但我还没有测试如果 Libgdx 默认有 2x Anti-Alias 设置。 Libgdx 可能会通过关闭 Anti-Alias 来解决 Unity 的问题。