我会在这里发布我的解决方案以及我为 Libgdx 尝试过的关于这个问题的方法。
--
T1。制作从某处下载到填充 2 的原始精灵表(无图集文件)。
A1。这对于重新打包没有图集的 spritesheet 是不可能的,即使您找到了切片/拆分工具,它也应该是一堆需要为 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。相机位置校正,使相机位置为整数。代码喜欢来自libgdx tiledmap 的 @Julian 或 @strangecat 闪烁与最近过滤
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 也有同样的问题,但我没有测试如果 Libgdx 默认有2x Anti-Alias设置。Libgdx 可能会通过关闭 Anti-Alias 来解决 Unity 问题。